问题描述:
给定一个Excel表格中的列名称,返回其相应的列序号。
例如,
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
示例 1:
输入: "A"
输出: 1
示例 2:
输入: "AB"
输出: 28
示例 3:
输入: "ZY"
输出: 701
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/excel-sheet-column-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
执行结果:
方案一
方案二
代码描述:
方案一:思路: 先把字母和值的hashmap对应好,然后循环解决问题。但是这个耗时耗内存,主要消耗在map上。
class Solution {
public:
int titleToNumber(string s) {
if(s.size() == 0) return 0;
map<char, int> m;
m['A'] = 1;
m['B'] = 2;
m['C'] = 3;
m['D'] = 4;
m['E'] = 5;
m['F'] = 6;
m['G'] = 7;
m['H'] = 8;
m['I'] = 9;
m['J'] = 10;
m['K'] = 11;
m['L'] = 12;
m['M'] = 13;
m['N'] = 14;
m['O'] = 15;
m['P'] = 16;
m['Q'] = 17;
m['R'] = 18;
m['S'] = 19;
m['T'] = 20;
m['U'] = 21;
m['V'] = 22;
m['W'] = 23;
m['X'] = 24;
m['Y'] = 25;
m['Z'] = 26;
int res = 0;
int i = s.size() - 1;
int j = 0;
for(; i >= 0; --i, ++j)
{
res += m[s[i]]*pow(26, j);
}
return res;
}
};
方案二: 用字符差,需要+1,直接计算值。
class Solution {
public:
int titleToNumber(string s) {
if(s.size() == 0) return 0;
int res = 0;
int i = s.size() - 1;
int j = 0;
for(; i >= 0; --i, ++j)
{
res += ((s[i] - 'A') + 1)*pow(26, j);
}
return res;
}
};