LeetCode | 168.Excel表列名称

这道题一开始以为是简单的进制转换问题,用的以往的思路,对于一般性的进制转换题目,只需要不断地对 columnNumber 进行 % 运算取得最后一位,然后对 columnNumber 进行 / 运算,将已经取得的位数去掉,直到 columnNumber 为 0 即可。

但是这里可不是这样,比如 26 是 Z,52 是 AZ,因为这里是从 1 开始表示的,没有从 0 开始。所以我就进行了一个判断,因为出现 0 的情况只会在 columnNumber 能整除 26 的时候出现,其他情况下还是可以使用以往的思路的,

python 复制代码
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 进制来处理。

python 复制代码
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
相关推荐
地平线开发者4 小时前
J6B vio scenario sample
算法
BothSavage16 小时前
Trae远程开发中DeepSeek自定义模型4054错误的排查与修复
算法
小林ixn16 小时前
从暴力到KMP:一道题彻底搞懂字符串匹配的前世今生
算法
烬羽18 小时前
字符串算法入门:从反转字符串到回文判断,面试不再慌
算法·面试
先吃饱再说1 天前
判断回文字符串,从一行代码到双指针优化
算法
黄敬峰2 天前
深入理解算法核心:从递归思想、数组扁平化到快速排序
算法
得物技术2 天前
从狂野代码到按目标生产:得物推荐 AI Harness 的工程化实践|AICon 演讲整理
人工智能·算法·架构
AI小老六2 天前
SkillOpt 架构拆解:把 Skill 文本当参数,用执行轨迹训练 Agent
后端·算法·ai编程