这题本质是个进制转换的问题(26进制转换为10进制):
int titleToNumber(char *s) {
int sum = 0;
int i = 0;
int tmp = 'A' - 1;
for(; i < strlen(s); i++){
sum = sum *26 + (s[i] - tmp);
}
return sum;
}
进制转换都是从字符串的最高位开始扫描,而不是从最低位
没有检测s是否为空字符串或者null,不过在leetcode里面好像从来不需要检测参数是否合法
从discuss中发现了一种C++递归的方法:
class Solution {
public:
int titleToNumber(string s) {
return s != "" ? 26*titleToNumber(s.substr(0,s.size() -1)) + s[s.size()-1] - 'A' + 1 : 0;
}
};
由于C语言中没有substr函数,所以不能写成上面C++这种形式