leetcode168. Excel表列名称

题目描述

给定一个正整数,返回它在 Excel表中相对应的列名称。

例如,
1 -> A
2 -> B
3 -> C

26 -> Z
27 -> AA
28 -> AB

示例 1:
输入: 1
输出: “A”

示例 2:
输入: 28
输出: “AB”

示例 3:
输入: 701
输出: “ZY”

思考

根据规律,不难看出这里是一个26进制的问题。
对比十进制,0,1,2,3,4,5,6,7,8,9 不同之处就在于十进制是:
012345678910
最后一位是10,而是不我们题目这里的逻辑00,这里就是题目的26进制和十进制的略微的差别。
因为,题目所给的是ABC,……,ZAAAB,……

代码实现

不妨先来几个案例看看:

#找规律:
27 = 26 * 1 + 1 => [1][1] => AA
28 = 26 * 1 + 2 => [1][2] => AB
701 = 26 * 26 + 25 => [26][25] => ZY
702 = 26 * 26 + 26 => [26][26] => ZZ

特别是702,我们不难计算:702 = 26 * 27
27 > 26 但是如果再次计算就变成了 702 = 26*(26 * 1 + 1) + 0
按照我们的逻辑,其位数就变成了三位数,分别是[1][1][0],但是实际是两位数,故而需要单独处理一下。
使之成为702 = 26 * 26 + 26 => [26][26] => ZZ
以得到正确的结果

class Solution(object):
    def convertToTitle(self, n):
        """
        :type n: int
        :rtype: str
        """
        wordlist = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
        # 找规律:
        # 27 = 26 * 1 + 1 => [1][1] => AA
        # 28 = 26 * 1 + 2 => [1][2] => AB
        # 701 = 26 * 26 + 25 => [26][25] => ZY
        # 702 = 26 * 26 + 26 => [26][26] => ZZ
        sum = ''
        while n:
            a = n % 26
            # 特殊情况,如 702 // 26 = 27 余 0
            if a == 0:
                sum = 'Z' + sum
                n = (n - 26) // 26
            else:
                sum = wordlist[a - 1] + sum
                n = n // 26
        return sum




if __name__ == '__main__':
    print(Solution().convertToTitle(28))

结果:
在这里插入图片描述


来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/excel-sheet-column-title

发布了169 篇原创文章 · 获赞 139 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_26460841/article/details/102709420
今日推荐