没有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])
posted @ 2022-12-08 17:37  何太狼  阅读(233)  评论(0编辑  收藏  举报