每日一練(42):Excel表序號

加班猿發表於2022-04-20

title: 每日一練(42):Excel表序號

categories:[劍指offer]

tags:[每日一練]

date: 2022/04/14


每日一練(42):Excel表序號

給你一個字串 columnTitle ,表示 Excel 表格中的列名稱。返回 該列名稱對應的列序號 。

例如:

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

示例 1:

輸入: columnTitle = "A"

輸出: 1

示例 2:

輸入: columnTitle = "AB"

輸出: 28

示例 3:

輸入: columnTitle = "ZY"

輸出: 701

提示:

1 <= columnTitle.length <= 7

columnTitle 僅由大寫英文組成

columnTitle 在範圍 ["A", "FXSHRXW"] 內

來源:力扣(LeetCode)

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

方法一: 進位制轉換(從前到後)

思路分析

這道題要求將 Excel 表中的列名稱轉換成相對應的列序號。由於 Excel 表的列名稱由大寫字母組成,大寫字母共有 26 個,因此列名稱的

表示實質是 26 進位制,需要將 26 進位制轉換成十進位制。

26進位制轉換,根據ASCII碼得到值。

int titleToNumber(string columnTitle) {
    int ans = 0;
    for (char c : columnTitle) {
        int k = c - 'A' + 1;
        ans = ans * 26 + k;
    }
    return ans;
}

方法二:進位制轉換(從後到前)

思路分析

26進位制轉換,根據ASCII碼得到值。

int titleToNumber(string columnTitle) {
    int ans = 0;
    long multiple = 1;
    int n = columnTitle.length() - 1;
    for (int i = n; i >= 0; --i) {
        int k = columnTitle[i] - 'A' + 1;
        ans += k * multiple;
        multiple *= 26;
    }
    return ans;
}

相關文章