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 Complexity | O(n) |
Space Complexity | O(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