[LeetCode] 168. Excel表列名称
题目链接 : https://leetcode-cn.com/problems/excel-sheet-column-title/
题目描述:
给定一个正整数,返回它在 Excel 表中相对应的列名称。
例如,
1 -> A
2 -> B
3 -> C
...
26 -> Z
27 -> AA
28 -> AB
...
示例:
示例 1:
输入: 1
输出: "A"
示例 2:
输入: 28
输出: "AB"
示例 3:
输入: 701
输出: "ZY"
思路:
做这道题要先了解一下, 十进制转二进制, 比如 6
转 成二进制多少?
2 |_ 6 _ ^
2|_ 3 _ ······ 0 |
2|_ 1 _ ·······1 |
|_ 0_ ·······1 |
所以, 我们能得到二进制为 110
, 这道题换句话说是十进制转26
进制的
但是有个难点: 如果 26
转成 字母是多少?
26|_ 26 _
1 --- 0
这里出现了0
, 但是我们26
字母 没有任何一个字母是表示0
, 所以我们可以从 商 借一个给余数
26| _ 26 _
0 ---- 26
这样就可以表示出来了,所以代码如下
class Solution:
def convertToTitle(self, n: int) -> str:
res = ""
while n:
n, y = divmod(n, 26)
if y == 0:
n -= 1
y = 26
res = chr(y + 64) + res
return res
看了其他做法, 他们先让n
减一
class Solution:
def convertToTitle(self, n: int) -> str:
res = ""
while n:
n -= 1
n, y = divmod(n, 26)
res = chr(y + 65) + res
return res
还有一种递归写法:
class Solution:
def convertToTitle(self, n: int) -> str:
return "" if n == 0 else self.convertToTitle((n - 1) // 26) + chr((n - 1) % 26 + 65)