题目链接
https://leetcode-cn.com/problems/excel-sheet-column-number/
题目
给你一个字符串
columnTitle
,表示 Excel 表格中的列名称。返回该列名称对应的列序号。例如:
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
示例
示例 1:
输入: columnTitle = "A"
输出: 1示例 2:
输入: columnTitle = "AB"
输出: 28示例 3:
输入: columnTitle = "ZY"
输出: 701示例 4:
输入: columnTitle = "FXSHRXW"
输出: 2147483647
提示
① 1 <= columnTitle.length <= 7
② columnTitle 仅由大写英文组成
③ columnTitle 在范围 ["A", "FXSHRXW"] 内
思路
根据题意,A代表第1列,B代表第2列,Z代表26列,AA代表27列,AB代表28列,我们要根据这串字符来求对应的列。
于是我们可以联想到,A、B、AA、AB这些我们可以表示成一个26进制数,这里每一位我们可以用 columnTitle[i]-'A'+1 转成相应的数字。
我们要做的也就是把这个26进制数转换成10进制数,这和我们知道的16进制数、8进制数、2进制数转成10进制数同理。
那么,我们回顾一下一个2进制数怎么转成10进制数,假设有一个2进制数:
110100
从最右边开始,第一位的值为,第二位为,第三位为....对每一位累加,即0+0+4+0+16+32=52
对于一个n进制数,转成10进制的通用公式就是:
因此,我们只需要按照以上公式,代入n=26,从右往左计算每一位代表的值,进行累加即可,当然,从左往右计算也是一样的。
C++ Code
class Solution {
public:
int titleToNumber(string columnTitle) {
int n=columnTitle.size();
long sum=0;
for(int i=n-1;i>=0;i--)
{
sum+=(columnTitle[i]-'A'+1)*pow(26,n-i-1);
//pow为求幂库函数,即求26的n-i-1次方
}
return sum;
}
};
结果