Given a positive integer, return its corresponding column title as appear in an Excel sheet.
1 -> A
2 -> B
3 -> C
...
26 -> Z
27 -> AA
28 -> AB
这题实际上是一个数到由字母A~Z组成的26进制转化问题。
可以观察到以下规律:
ABCD=A×26³+B×26²+C×26¹+D=1×26³+2×26²+3×26¹+4
但是不能简单的使用 n%26 ,因为:
ZZZZ=Z×26³+Z×26²+Z×26¹+Z=26×26³+26×26²+26×26¹+26
因此,我们可以使用** (n-1) % 26 **去解决该问题。
在构造的过程中,从低位到高位依次构造。
在编程的过程中,可以以以下两个数为例子编写代码:
53 -> BA -> B*26¹ + A = 2*26 + 1
78 -> BZ -> B*26¹ + Z = 2*26 + 26
在Python中,使用 chr(65) = 'A'
可以将数字转化为 ASCLL,使用 ord('A') = 65
可以将 ASCLL 转化为数字。
class Solution(object):
def convertToTitle(self, n):
"""
:type n: int
:rtype: str
"""
ans = ''
while n > 0:
tem = (n - 1) % 26 # 防止ZZZ这种
ans = chr(tem + ord('A')) + ans # 从低位到高位依次构造
n -= tem # 减去低位
n //= 26 # 降幂
return ans
a = 26*(26**2)+26*(26**1)+26*(26**0)
b = 1*(26**3)+1*(26**2)+1*(26**1)+1*(26**0)
c = Solution()
print(c.convertToTitle(a)) # ZZZ
print(c.convertToTitle(b)) # AAAA