p81 Excel表列序号(leetcode 171)

一:解题思路

列表题是一个26进制数表示的字符串,其中1到26用A到Z表示。而这个题目的本质就是,让我们把这个26进制数转化为一个10进制数。

1.设置一个base=1,字符串从右向左进行遍历,将当前字母表示的数字乘以base,加入到最后的结果num中,然后将base*26。Time:O(n),Space:O(1)

二:完整代码示例 (C++版和Java版)

C++:

class Solution {
public:
    int titleToNumber(string s) 
    {
        int num = 0;
        long base = 1;
        for (int i = s.size() - 1; i >= 0; i--)
        {
            num += (s[i] - 'A' + 1)*base;
            base *= 26;
        }

        return num;
    }
};

Java:

class Solution {
        public int titleToNumber(String s) 
        {
               int base=1,num=0;
               for(int i=s.length()-1;i>=0;i--)
               {
                   num+=(s.charAt(i)-'A'+1)*base;
                   base*=26;
               }
               
               return num;
        }
    }

 

posted @ 2020-04-04 17:19  repinkply  阅读(136)  评论(0)    收藏  举报