LeetCodeOJ_171_Excel Sheet Column Number

答题链接

题目:

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;
    }
};

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值