• LeetCode | 168.Excel表列名称


    在这里插入图片描述
    这道题一开始以为是简单的进制转换问题,用的以往的思路,对于一般性的进制转换题目,只需要不断地对 columnNumber 进行 % 运算取得最后一位,然后对 columnNumber 进行 / 运算,将已经取得的位数去掉,直到 columnNumber 为 0 即可。
    但是这里可不是这样,比如 26 是 Z,52 是 AZ,因为这里是从 1 开始表示的,没有从 0 开始。所以我就进行了一个判断,因为出现 0 的情况只会在 columnNumber 能整除 26 的时候出现,其他情况下还是可以使用以往的思路的,

    class Solution(object):
        def convertToTitle(self, columnNumber):
            """
            :type columnNumber: int
            :rtype: str
            """
            ans = ''
            # 使用字典推导式创建映射字典
            mapping = {i - 64: chr(i) for i in range(65, 91)}
            while columnNumber > 0:
                if columnNumber % 26 == 0:
                    ans = mapping[26] + ans
                    columnNumber -= 26
                else:
                    ans = mapping[columnNumber % 26] + ans
                columnNumber = columnNumber // 26
            return ans
    

    在这里插入图片描述
    题解用的是数学的方法,很巧妙,总体的意思就是和正常 0~25 的 26 进制相比,本质上就是每一位多加了 1。假设 A == 0,B == 1,那么 AB = 26 * 0 + 1 * 1,而现在 AB = 26 * (0 + 1) + 1 * (1 + 1),所以只要在处理每一位的时候减 1,就可以按照正常的 26 进制来处理。

    在这里插入图片描述

    class Solution(object):
        def convertToTitle(self, columnNumber):
            """
            :type columnNumber: int
            :rtype: str
            """
            ans = ''
            # 使用字典推导式创建映射字典
            mapping = {i - 64: chr(i) for i in range(65, 91)}
            while columnNumber > 0:
                a = (columnNumber - 1) % 26 + 1
                ans = mapping[a] + ans
                columnNumber = (columnNumber - a) // 26
            return ans
    
  • 相关阅读:
    Vue3实现动态导入Excel表格数据
    【FPGA】串口以命令控制温度采集
    obsidian和zotero联动
    stm32备份
    设计LRU缓存结构
    git pull and git fetch 到底有什么区别?
    Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单
    React 编写网页聊天界面(仿钉钉)
    回溯算法 解题思路
    Let Users Edit PDFs Directly in the Browser
  • 原文地址:https://blog.csdn.net/weixin_44043952/article/details/139692973