LeetCode No.171

给定一个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
原文地址:https://www.cnblogs.com/2Bthebest1/p/11182036.html