每日一練(41):Excel表列名稱

加班猿發表於2022-04-19

title: 每日一練(41):Excel表列名稱

categories:[劍指offer]

tags:[每日一練]

date: 2022/04/13


每日一練(41):Excel表列名稱

給你一個整數 columnNumber ,返回它在 Excel 表中相對應的列名稱。

例如:

A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...

示例 1:

輸入:columnNumber = 1

輸出:"A"

示例 2:

輸入:columnNumber = 28

輸出:"AB"

示例 3:

輸入:columnNumber = 701

輸出:"ZY"

示例 4:

輸入:columnNumber = 2147483647

輸出:"FXSHRXW"

提示:

1 <= columnNumber <= 231 - 1

來源:力扣(LeetCode)

連結:https://leetcode-cn.com/probl...

方法一: 從1開始的26進位制轉換

思路分析

正常的26進位制顯示數字應該是0-25,而本題是1-26,那麼在處理每一位之前進行減一,即可變成正常進位制轉換操作。

string convertToTitle(int columnNumber) {
    string ans;
    do {
        columnNumber--;
        ans = char(columnNumber % 26 + 'A') + ans;//得到字元列名稱
        columnNumber /= 26;
    } while(columnNumber > 0);
    return ans;
}

方法二:取餘+反轉

思路分析

當餘數為0時,我們不能取@而是應該取Z

string convertToTitle(int columnNumber) {
    string ans;
    while (columnNumber) {
        int remainder = columnNumber % 26;
        if (remainder == 0) { //如果餘數是0,就像上一位借個1(26)出來,讓餘數強行等於26
            remainder = 26;
            columnNumber -= 26;
        }
        ans.push_back(remainder + 'A' - 1);
        columnNumber /= 26;
    }
    reverse(ans.begin(), ans.end());//字串倒序
    return ans;
}

相關文章