Problem

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

For example:

A -> 1
B -> 2
C -> 3

Z -> 26
AA -> 27
AB -> 28

https://leetcode.com/problems/excel-sheet-column-number/

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"].

Test Cases

1
2
class Solution:
def titleToNumber(self, columnTitle: str) -> int:
solution_test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
import pytest

from solution import Solution


@pytest.mark.parametrize('columnTitle, expected', [
("A", 1),
("AB", 28),
("ZY", 701),
])
@pytest.mark.parametrize('sol', [Solution()])
def test_solution(sol, columnTitle, expected):
assert sol.titleToNumber(columnTitle) == expected

Thoughts

168. Excel Sheet Column Title 的反函数。

把每一个字母翻译成 1 到 26 的整数,乘以 26 的相应次幂即可。

168. Excel Sheet Column Title 代码中的 columnNumber - 1 对应于这里的 ord(c) - ord('A') + 1 = ord(c) - 64

Code

solution.py
1
2
3
4
5
6
7
8
class Solution:
def titleToNumber(self, columnTitle: str) -> int:
num = 0
for c in columnTitle:
d = ord(c) - 64
num = num * 26 + d

return num