题目:
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
分析:
先举几个一般的例子:
B ——>2
CB ——>26*3+2
(why?因为26个单一字母字符串,26个以A开头的双字母字符串,26个以B开头的双字母字符串之后,才能轮到以C开头的双字母字符串,也就是说CA对应26*3+1,所以CB对应26*3+2)
DCB——>26*26*4+26*3+2
(why?对于以D为首的三字母字符串,前面共有26+26*26+26*26*3个不同的字符串,也就是说DAA应26*26*4+26+1,那么DCA与CAA相距26*2个字符串,DCB与DCA相距1个字符串,所以DCB对应26*26*4+26*3+2)
总结如下:
假设A对应1,B对应2……Z对应26,那么,长为n的字符串str,其对应的数字为26^(n-1)*s[0]+26^(n-2)*s[1]+…+26^(n-n)*s[n-1]。
其中s[0],s[1]…s[n-1]表示str中相应位置的字母所对应的数字。
代码:
class Solution {
public:
int titleToNumber(string s) {
int str_len=s.length();
int num=0;
int m=0;
for(int i=0;i<str_len;i++)
{
switch(s[i])
{
case 'A':{ m=1; break;}
case 'B':{ m=2; break;}
case 'C':{ m=3; break;}
case 'D':{ m=4; break;}
case 'E':{ m=5; break;}
case 'F':{ m=6; break;}
case 'G':{ m=7; break;}
case 'H':{ m=8; break;}
case 'I':{ m=9; break;}
case 'J':{ m=10; break;}
case 'K':{ m=11; break;}
case 'L':{ m=12; break;}
case 'M':{ m=13; break;}
case 'N':{ m=14; break;}
case 'O':{ m=15; break;}
case 'P':{ m=16; break;}
case 'Q':{ m=17; break;}
case 'R':{ m=18; break;}
case 'S':{ m=19; break;}
case 'T':{ m=20; break;}
case 'U':{ m=21; break;}
case 'V':{ m=22; break;}
case 'W':{ m=23; break;}
case 'X':{ m=24; break;}
case 'Y':{ m=25; break;}
case 'Z':{ m=26; break;}
}
num+=pow(26,str_len-i-1)*m;
}
return num;
}
};