一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 本题给出一个字符串columnTitle,范围在["A", "FXSHRXW"]
- 要求将columnTitle转化为十进制数字
二、思路分析:
我们拿到该题,与上次我们刷到的168. Excel表列名称 的逆运算。168.Excel表的列名称是求根据10进制数求出26进制。本题,要求26进制求出10进制数。
我们再来复习一下,10进制转换26进制是如何工作的。
- 因为26进制没有零的概念,因此对十进制数要先进行减一操作
- 然后对减一的十进制数对26进行取余,得到余数pre
- 余数pre与ASCII码 A 65进行添加转化成对应26个字母
- 最后得到的字符串进行反向输出,即可得到答案。
那对于26进制转化为十进制,我们是不是有思路啦,逆向操作。
- 遍历26进制的字母串每个字母
- 对每个字母转化成ASCII码,减ord("A") 65等到余数tmp
- 定义一个变量ans来存储十进制值,ans = 0
- 每一次遍历的值都ans*26+tmp+1赋值给ans
根据如上思路,我们使用python很容易就能实现,代码如下:
class Solution(object):
def titleToNumber(self, columnTitle):
"""
:type columnTitle: str
:rtype: int
"""
ans = 0
for i in columnTitle:
tmp = ord(i) -65+1
ans = ans*26+tmp
return ans
三、总结:
本题仍然考察的是进制转化的问题,关于的进制转化问题,多多练习,刚开始还是有点绕。
时间复杂度O(n),需要遍历字符串。空间复杂度O(1),没有增加额外空间。
以上是本期内容,欢迎大佬们点赞评论,下期见~~