一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 本题给一个整数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()转化
然而,按照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
优化代码,通过代码如下:
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提交记录如下:
时间复杂度O(log26^columNumber),空间复杂度O(1)
以上是本期内容,欢迎大佬们点赞评论,下期见~~