Probelm Description
Given a positive integer, return its corresponding column title as appear in an Excel sheet.
For example:
1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> AB
Thinking:
这个问题是 Easy 型的,也就是比较简单,但是如果不想清楚,很难做对。因为这个题目比较别扭的是列数计数不是从 0 开始的,而是从1开始的,比如从 26(Z) 到 27(AA) , 如果直接看成 26 进制的数的话, 会发现Z(26) 加1直接变成了AA(11),而不是我们习惯的(10)。所以需要特别注意一下。
我们先来看一个字符串表示的数字好了,用
[βn,βn−1,...,β0]
表示一个
n
位的待转换的字符串,那么它表示的整数为:
比如对于字符 ZZZ 表示的整数为
26∗262+26∗261+26∗260=26∗262+26∗26+26=18174
那么 ZZZ 的下一列,也就是 AAAA =
1∗263+1∗262+1∗261+1∗260=18175
Python Code:
由上面的分析可以看到,可以不断地除以26,得到的余数就是当前位,不过需要注意的是,当余数为0的时候,说明当前位表示的数应该是26(Z),这时候要把商减去1。
class Solution(object):
def convertToTitle(self, n):
"""
:type n: int
:rtype: str
"""
resStr = ""
numMod = n
while True:
if numMod <= 0:
break
numMod, numRem = divmod(numMod, 26)
if numRem == 0:
numMod -= 1
resStr = "Z"+resStr
else:
resStr = chr(64+numRem)+resStr
return resStr