【LeetCode】168. Excel表列名称

218 阅读2分钟

image.png

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

image.png

  • 题目示例

image.png

  • 题目解析

    • 本题给一个整数columNumber,其整数范围为[1,2^31 - 1]
    • 要求求出Excel表里对应的列名称
    • Excel 表以AscII 大写A~Z 26个字母组成

二、思路分析:

我们拿到本题,马上想到了与我们之前刷的关于637.交替二进制、十进制的202.快乐数类似的进制问题。

心里暗想今天的题目, take a cake。举一反三26进制的问题走起。

  • 当columNumber大于零时,不断对columnNumber对26取余。
  • A~Z字母的ASCII指范围为65~90.数字1对应的是字母A,进行chr()转化

image.png

然而,按照26进制思路实现代码后,发现数字52、26转化结果是错误的。

s = ""
while columNumber>0:
     pre = columnNumber % 26-1
     s = s+chr(65+pre)
     columnNumber = columnNumber/26
return s[::-1] 
  • 26进制,余数存在0时,我们以上没有考虑到
  • A~Z范围为1~26,也不存在零

怎么解决26进制存在零时的情况,卡壳一段时间.....

  • columNumber 每一次对26取余的时候,先进行减1

image.png

优化代码,通过代码如下:

class Solution(object):
    def convertToTitle(self, columnNumber):
        """
        :type columnNumber: int
        :rtype: str
        """
        s = ""
        while columnNumber > 0:

            columnNumber = columnNumber-1    
            pre = columnNumber % 26
            s = s+chr(65+pre)
            columnNumber = columnNumber/26
        
        return s[::-1]

三、总结:

本题考察是26进制,但是要考虑余数是零的情况,AC提交记录如下:

image.png

时间复杂度O(log26^columNumber),空间复杂度O(1)

以上是本期内容,欢迎大佬们点赞评论,下期见~~