LeetCode 168. Excel表列名称

159 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

1.描述

168. Excel表列名称 - 力扣(LeetCode)

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

例如:

A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28 
...

 

示例 1:

输入:columnNumber = 1
输出:"A"

示例 2:

输入:columnNumber = 28
输出:"AB"

示例 3:

输入:columnNumber = 701
输出:"ZY"

示例 4:

输入:columnNumber = 2147483647
输出:"FXSHRXW"

提示:

  • 1 <= columnNumber <= 2^31 - 1

2.分析

将1~26所对应的字母存放于字典中,可以将其看做是个26进制的问题,对所给数字对26取模,所对应的键值即为返回结果最后一位的字符。然后将其对26整除,用以上方法计算倒数第2,3,...个字符。最后将其整个结果反转即为所求结果。值得注意的是:若所给数字是26的倍数,所对应的字符应该为Z。而且将n整除后还需要将整除的结果减一,因为只有前n-1个产生了进位。为了与不能被26整除的数处理一致,故在字典中添加了键为0,值为Z的键值对。

3.AC代码

class Solution:
    def convertToTitle(self, n: int) -> str:
        dit = {1:'A',2:'B',3:'C',4:'D',5:'E',6:'F',7:'G',8:'H',9:'I',10:'J',11:'K',12:'L',13:'M',14:'N',15:'O',16:'P',17:'Q',18:'R',19:'S',20:'T',21:'U',22:'V',23:'W',24:'X',25:'Y',26:'Z',0:'Z'}
        result =""
        while  n > 26 :
            result += dit[n % 26]
            if n % 26 ==0:
                n = n//26 -1
            else:
                n //= 26
        result +=dit[n]
        return result[::-1]

4.总结

题目不难,注意细节

参考

双百不用逆序,参考了很多大佬,一起加油。 - Excel表列名称 - 力扣(LeetCode)

[python3] 通过减法将其变成正常的26进制 - Excel表列名称 - 力扣(LeetCode)

简单题重拳出击,无循环,利用js内置进制转换 - Excel表列名称 - 力扣(LeetCode)