Skip to content

LeetCode: 171-Excel Sheet Column Number 解題紀錄

Last Updated on 2022-02-22 by Clay

題目

Given a string columnTitle that represents the column title as appear in an Excel sheet, return its corresponding column number.

For example:

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

Example 1:

Input: columnTitle = "A"
Output: 1

Example 2:

Input: columnTitle = "AB"
Output: 28

Example 3:

Input: columnTitle = "ZY"
Output: 701

Constraints:

  • 1 <= columnTitle.length <= 7
  • columnTitle consists only of uppercase English letters.
  • columnTitle is in the range ["A", "FXSHRXW"].

題目輸入一組字串,字串的編號number)依循著英文大寫字母的規律成長,比方說 A -> 1 ... Z -> 26、接著又從 AA -> 27 ... AB -> 28 依序遞增。


解題思路

因為英文字母有 26 個,所以我們可以想像成這是一個 26 進制的數值遞增。

  • A -> 1 = 0 * 26 + 1
  • B -> 2 = 0 * 26 + 2
  • ...
  • Z -> 26 = 0 * 26 + 26
  • AA -> 27 = 1 * 26 + 1
  • AB -> 28 = 1 * 26 + 2
  • ...
  • BA -> 53 = 2 * 26 + 1

對比十進制的計算方法,我們首先計算每個數字的數值,接著在加上下一位數字前將當前加總值乘以 10、反覆做這件事直到計算完每一個數字。

現在就只是將 10 改成 26 的版本。

順帶一提,由於大寫字母 'A' 的數值為 65,所以我們計算當前字母所代表的數字時,直接將其減去 64,就可以順利定位到每個字母所代表的數字。

比方說 A 就是 1、B 就是 2。


複雜度

Time ComplexityO(n)
Space ComplexityO(1)


C++ 範例程式碼

class Solution {
public:
    int titleToNumber(string columnTitle) {
        // Init
        int ans = 0;
        
        // Count ('A' = 65)
        for (auto t: columnTitle) {
            ans *= 26;
            ans += t - 64;
        }
        
        return ans;
    }
};



Python 範例程式碼

class Solution:
    def titleToNumber(self, columnTitle: str) -> int:
        # Init
        ans = 0
        
        # Count ('A' = 65)
        for t in columnTitle:
            ans *= 26
            ans += ord(t) - 64
        
        return ans

References


Read More

Leave a Reply