给定一个Excel表格中的列名称,返回其相应的列序号。
例如,
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
示例 1:
输入: "A"
输出: 1
示例 2:
输入: "AB"
输出: 28
示例 3:
输入: "ZY"
输出: 701
解题思想:这道题是168题的逆运算。通过构造 乘数表 multiplier 和被乘数表 m,利用 求和可以得到最终值。
//171 int titleToNumber(string s) { map<char,short> m{ {'A',1},{'B',2},{'C',3},{'D',4},{'E',5},{'F',6},{'G',7},{'H',8},{'I',9},{'J',10}, {'K',11},{'L',12},{'M',13},{'N',14},{'O',15},{'P',16},{'Q',17},{'R',18},{'S',19},{'T',20}, {'U',21},{'V',22},{'W',23},{'X',24},{'Y',25},{'Z',26} }; map<size_t,int> multiplier{ {1,1},{2,26},{3,676},{4,17576},{5,456976},{6,11881376},{7,308915776} }; if(s.empty()) return 0; int res =0; size_t size=s.size(); for(size_t i=0;i<size;i++) res +=m[s[i]]*multiplier[size-i]; return res; }//171