LeetCode 171[Excel表列序號]

EricsT發表於2024-11-09

題目

連結

LeetCode 171[Excel表列序號]

詳情

LeetCode 171[Excel表列序號]

例項

LeetCode 171[Excel表列序號]

提示

LeetCode 171[Excel表列序號]

題解

思路

這其實是一道26進位制的算術題

其中

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

可以用 switch 列舉,也可以用公式計算:所求字元 - 'A' + 1,例如需要求Z的權重,則 'Z' - 'A' + 1 = 90 - 65 + 1 = 26

在10進位制裡面:

  123的位數是3,123 = 10 ^ (3 - 1) * 1 + 10 ^ (3 - 2) * 2 + 10 ^ (3 - 3) * 3

同理在26進位制裡面:

  ABC的位數是3,ABC = 26 ^ (3 - 1) * A + 26 ^ (3 - 2) * B + 26 ^ (3 - 3) * C

其中冪運算用數學函式 pow 函式計算

其中位數用字串的 size 方法求得

程式碼

class Solution {
public:
    int titleToNumber(string columnTitle) {
       long long llRet = 0;

       size_t iSize = columnTitle.size();

       for (int i = 0; i < iSize; i++)
       {
            long long llNum = pow(26, iSize - i - 1);
            switch (columnTitle.at(i))
            {
                case 'A':llNum *= 1;break;
                case 'B':llNum *= 2;break;
                case 'C':llNum *= 3;break;
                case 'D':llNum *= 4;break;
                case 'E':llNum *= 5;break;
                case 'F':llNum *= 6;break;
                case 'G':llNum *= 7;break;
                case 'H':llNum *= 8;break;
                case 'I':llNum *= 9;break;
                case 'J':llNum *= 10;break;
                case 'K':llNum *= 11;break;
                case 'L':llNum *= 12;break;
                case 'M':llNum *= 13;break;
                case 'N':llNum *= 14;break;
                case 'O':llNum *= 15;break;
                case 'P':llNum *= 16;break;
                case 'Q':llNum *= 17;break;
                case 'R':llNum *= 18;break;
                case 'S':llNum *= 19;break;
                case 'T':llNum *= 20;break;
                case 'U':llNum *= 21;break;
                case 'V':llNum *= 22;break;
                case 'W':llNum *= 23;break;
                case 'X':llNum *= 24;break;
                case 'Y':llNum *= 25;break;
                case 'Z':llNum *= 26;break;
            }

            llRet += llNum;
       }

       return llRet;
    }
};

相關文章