本文概述
我们已经讨论过从列号转换为Excel列名。在这篇文章中, 讨论了反向。
给定列标题(如Excel工作表中所示), 返回其对应的列号。
column column number
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
例子:
Input: A
Output: 1
A is the first column so the output is 1.
Input: AA
Output: 27
The columns are in order A, B, ..., Y, Z, AA ..
So, there are 26 columns after which AA comes.
方法:
该过程类似于二进制到十进制的转换。
例如, 要转换AB, 公式为26 * 1 + 2。
再举一个例子
To convert CDA, 3*26*26 + 4*26 + 1
= 26(3*26 + 4) + 1
= 26(0*26 + 3*26 + 4) + 1
因此, 这非常类似于将二进制数转换为十进制(将基数保持为26)。
将输入作为字符串, 然后从左到右遍历输入字符串, 并计算结果, 如下所示:
result = 26*result + s[i] - 'A' + 1
.
结果将是
.
C ++
// C++ program to return title to result
// of excel sheet.
#include <bits/stdc++.h>
using namespace std;
// Returns resul when we pass title.
int titleToNumber(string s)
{
// This process is similar to
// binary-to-decimal conversion
int result = 0;
for ( const auto & c : s)
{
result *= 26;
result += c - 'A' + 1;
}
return result;
}
// Driver function
int main()
{
cout << titleToNumber( "CDA" ) << endl;
return 0;
}
Java
// Java program to return title
// to result of excel sheet.
import java.util.*;
import java.lang.*;
class GFG
{
// Returns resul when we pass title.
static int titleToNumber(String s)
{
// This process is similar to
// binary-to-decimal conversion
int result = 0 ;
for ( int i = 0 ; i < s.length(); i++)
{
result *= 26 ;
result += s.charAt(i) - 'A' + 1 ;
}
return result;
}
// Driver Code
public static void main (String[] args)
{
System.out.print(titleToNumber( "CDA" ));
}
}
// This code is contributed
// by Akanksha Rai(Abby_akku)
Python3
# Python program to return title to result
# of excel sheet.
# Returns resul when we pass title.
def titleToNumber(s):
# This process is similar to binary-to-
# decimal conversion
result = 0 ;
for B in range ( len (s)):
result * = 26 ;
result + = ord (s[B]) - ord ( 'A' ) + 1 ;
return result;
# Driver function
print (titleToNumber( "CDA" ));
# This code contributed by Rajput-Ji
C#
// C# program to return title
// to result of excel sheet.
using System;
class GFG
{
// Returns resul when we pass title.
public static int titleToNumber( string s)
{
// This process is similar to
// binary-to-decimal conversion
int result = 0;
for ( int i = 0; i < s.Length; i++)
{
result *= 26;
result += s[i] - 'A' + 1;
}
return result;
}
// Driver Code
public static void Main( string [] args)
{
Console.Write(titleToNumber( "CDA" ));
}
}
// This code is contributed by Shrikant13
输出如下:
2133
复杂度分析:
- 时间复杂度:O(n), 其中n是输入字符串的长度。
- 空间复杂度:O(1)。
由于不需要额外的空间。
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。