没有0的进制
Excel表列名称
基本思路
题目要求按照规则进行进制转换,该进制虽然为26进制,但是没有0,即其每个数的范围是[1,26]。
假设现有字符序列\(a_{n-1}...a_1a_0\),其对应的十进制数字为num。那么我们有:
\[num = \sum^{n-1}_{i=0} a_i*26^i
\]
由于\(a_0\)的系数为1,故原式等价为:
\[num = a_0 + \sum^{n-1}_{i=1}a_i*26^i
\]
即:
\[num - 1= a_0 - 1 + \sum^{n-1}_{i=1}a_i*26^i
\]
此时,根据题意\(a_0\in[1,26]\),\(a_0 - 1 \in [0,25]\),即\((num-1)\%26 = (a_0 - 1)\),这样就可以得到\(a_0\)的值。
上式两边同除以26得:
\[(num-1)/26 = \sum^{n-1}_{i=1}a_i*26^{i-1} = \sum^{n-1}_{i=2}a_i*26^{i-1} + a_1
\]
按照相同的方法我们又可以得到\(a_1\)的值。
参考代码
class Solution:
def convertToTitle(self, columnNumber: int) -> str:
ans = list()
while columnNumber > 0 :
columnNumber -= 1
ans.append(chr(columnNumber % 26 + ord('A')))
columnNumber //= 26
return "".join(ans[::-1])