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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值