从列标题中查找 Excel 列号
我们已经讨论了从列号到 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
using namespace std;
// Returns result 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 result 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 result 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 result 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
Javascript
输出:
2133
复杂性分析:
- 时间复杂度: O(n),其中 n 是输入字符串的长度。
- 空间复杂度: O(1)。
因为不需要额外的空间。