LeetCode171——Excel Sheet Column Number

  很简单的一道题,输出excel中字母对应的数字。但是由于自己的程序思想还是很差,代码很长。

class Solution
{
public:
    int titleToNumber(string s)
    {
        int ans = 0;
        int tmp = 1;
        auto len = s.size();
        
        if (len == 1)
        {
            return letterToNumber(s[0]);
        }
        
        for (auto i = 0; i != len; ++ i)
        {
            ans += letterToNumber(s[i]) * pow(26,(len - tmp));
            tmp ++;
        }
        ans += letterToNumber(s[len - tmp]);
        return ans;
    }
    int letterToNumber(char p)
    {
        int ans = 0;
        switch(p)
        {
            case 'A':
                ans = 1;
                break;
            case 'B':
                ans = 2;
                break;
            case 'C':
                ans = 3;
                break;
            case 'D':
                ans = 4;
                break;
            case 'E':
                ans = 5;
                break;
            case 'F':
                ans = 6;
                break;
            case 'G':
                ans = 7;
                break;
            case 'H':
                ans = 8;
                break;
            case 'I':
                ans = 9;
                break;
            case 'J':
                ans = 10;
                break;
            case 'K':
                ans = 11;
                break;
            case 'L':
                ans = 12;
                break;
            case 'M':
                ans = 13;
                break;
            case 'N':
                ans = 14;
                break;
            case 'O':
                ans = 15;
                break;
            case 'P':
                ans = 16;
                break;
            case 'Q':
                ans = 17;
                break;
            case 'R':
                ans = 18;
                break;
            case 'S':
                ans = 19;
                break;
            case 'T':
                ans = 20;
                break;
            case 'U':
                ans = 21;
                break;
            case 'V':
                ans = 22;
                break;
            case 'W':
                ans = 23;
                break;
            case 'X':
                ans = 24;
                break;
            case 'Y':
                ans = 25;
                break;
            case 'Z':
                ans = 26;
                break;
            default:
                break;
        }
        return ans;
    }
};

看了别人的代码之后,深深感觉自己的弱小。他们利用了ascii码极大的减少了switch case 的繁琐。

int titleToNumber(string s) {

    int len = s.length(), sum=0;

    for(int i=0;i<len;i++)
        sum += (int(s[i]-'A'+1))*pow(26,len-1-i);

    return sum;
}

短短几行代码就将这个问题解决了,看来学习之路还很漫长!加油!!!!!!!

posted on 2015-12-11 16:48  MMac  阅读(159)  评论(0编辑  收藏  举报

导航