【LeetCode】171. Excel 表列序号

203 阅读2分钟

image.png

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

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

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

一、题目描述:

  • 题目内容

    image.png

  • 题目示例

    image.png

  • 题目解析

    • 本题给出一个字符串columnTitle,范围在["A", "FXSHRXW"]
    • 要求将columnTitle转化为十进制数字

二、思路分析:

我们拿到该题,与上次我们刷到的168. Excel表列名称 的逆运算。168.Excel表的列名称是求根据10进制数求出26进制。本题,要求26进制求出10进制数。

我们再来复习一下,10进制转换26进制是如何工作的。

  • 因为26进制没有零的概念,因此对十进制数要先进行减一操作
  • 然后对减一的十进制数对26进行取余,得到余数pre
  • 余数pre与ASCII码 A 65进行添加转化成对应26个字母
  • 最后得到的字符串进行反向输出,即可得到答案。 image.png

那对于26进制转化为十进制,我们是不是有思路啦,逆向操作。

  • 遍历26进制的字母串每个字母
  • 对每个字母转化成ASCII码,减ord("A") 65等到余数tmp
  • 定义一个变量ans来存储十进制值,ans = 0
  • 每一次遍历的值都ans*26+tmp+1赋值给ans image.png

根据如上思路,我们使用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

三、总结:

本题仍然考察的是进制转化的问题,关于的进制转化问题,多多练习,刚开始还是有点绕。

image.png

时间复杂度O(n),需要遍历字符串。空间复杂度O(1),没有增加额外空间。

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