171. Excel表列序号 - 力扣
题意:
给定一个Excel表格中的列名称,返回其相应的列序号。
例如,
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
示例 1:
输入: "A"
输出: 1
示例 2:
输入: "AB"
输出: 28
示例 3:
输入: "ZY"
输出: 701
解题思路:
这种算数我习惯从尾部开始
问 答 数字是怎么算出来的? 26个字母对于1~26,再乘以相应的位权相加即可 如何获得相应的位权? 定义一个 count = 0
,每次循环都加1,用26count来表示位权.如何从尾部字符开始? string一个函数, string.back()
可以返回最后一个字符.再减去64
就可以得到相应的数字如何每次都获取相应的字符? 当用完最后一个字符后,调用 string.pop_back()
可以移除最后一个字符.如何获得结果? 根据以上获得相应的数字后乘以位权,然后与sum相加.直到字符串为空即可
- 到这时已经完成了这道题,完成的代码如下:
class Solution {
public:
int titleToNumber(string columnTitle) {
//如果字符串为空,直接等于0
if (columnTitle.empty())
return 0;
int sum = 0;
int count = 0;
//循环直到字符串为空
while (!columnTitle.empty())
{
//获得最后一个字符,转为相应数字后乘位权再与sum相加
sum += (columnTitle.back() - 64) * pow(26,count);
//移除最后一个字符
columnTitle.pop_back();
//相应位权增加
count++;
}
//返回结果
return sum;
}
};
总结:
总体过程并不难想,这道题有多种解法. 我习惯从尾部开始就这样一想到底.也可以直接从第一个开始算.只要结果正确即可.