Given a column title as appear in an Excel sheet, return its corresponding column number.
For example:
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
思路:首先看
A: 1 * 26 ^ 0;
B: 2 * 26 ^ 0;
...
AA: 1 * 26 ^ 1 + 1 * 26 ^ 0 = 27;
AB: 1 * 26 ^ 1 + 2 * 26 ^ 0 = 28;
...
BA: 2 * 26 ^1 + 1 * 26 ^ 0 = 53;
...
规律就是假如是一个长度为2的字符串,那么对应的数为:(s[0] - 'A' +1) * 26 ^ 1 + (s[1] - 'A' + 1) * 26 ^ 0;
假如是长度为n的字符串,那么对应的数为:(s[0] - 'A' + 1) * 26 ^ (n-1) + ... + (s[n-1] - 'A' + 1) * 26 ^ 0;
。。。好吧,由此可以看出,这是求一个n-1次多项式的和。
一种方法就是直接求出每一项的值,再求和。这里时间复杂度是很高的,因为26 ^ (n-1)重复计算了。
还有一种方法就是利用霍纳法则(也就是秦九韶算法)了。(可在文章分类-算法分析中找到有关霍纳法则的具体原理)。
1 class Solution { 2 public: 3 int titleToNumber(string s) { 4 int len = s.length(); 5 int ans = 0; 6 for(int i = 0; i < len; i++){ 7 int tmp = s[i] - 'A' + 1; 8 ans = ans * 26 + tmp; 9 } 10 return ans; 11 } 12 };