LeetCode 168. Excel表列名称与列序号转换(171)

本文介绍了LeetCode的两道题目:168. Excel表列名称和171. Excel表列序号。对于168题,通过建立26字母字典解决取余问题,避免多余字母的添加。而在171题中,可以将问题视为26进制转十进制,可以通过字符到数字的映射或直接使用ord()函数转换求解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

168. Excel表列名称

题目:给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。

链接 https://leetcode.cn/problems/excel-sheet-column-title/

个人思路
  1. 建立一个26字母的字典,循环不断取余,然后在字典中取出相应的字母即可
class Solution:
    def convertToTitle(self, columnNumber: int) -> str:
        haxi = {}
        for i in range(1,26):
            haxi[i] = chr(64+i)
        haxi[0] = 'Z'
        ansList = []
        while columnNumber >= 26:
            temp = columnNumber % 26
            ansList.append(haxi[temp]) 
            columnNumber = columnNumber // 26
        if columnNumber:
            ansList.append(haxi[columnNumber])
        ansList.reverse()
        return ''.join(ansList)

这里是有漏洞的,因为当后续columnNumber刚好是26时,会出现columnNumber // 26 = 1,从而多加了一个字母
改进:

class Solution:
    def convertToTitle(self, columnNumber: int) -> str:
        haxi = {}
        # 建立26个字母为值的字典
        for i in range(1,26):
            haxi[i] = chr(64+i)
        haxi[0] = 'Z'
        ansList = []
        while columnNumber > 26:
            temp = columnNumber % 26
            ansList.append(haxi[temp]) 
            if temp == 0:
                columnNumber = columnNumber - 26
            columnNumber = columnNumber // 26
            print(columnNumber)
        ansList.append(haxi[columnNumber % 26])
        ansList.reverse()
        return ''.join(ansList)
其他思路
  1. 思路1
    一般性的进制转换题目无须进行额外操作,是因为我们是在「每一位数值范围在 [0,x)」的前提下进行「逢 x 进一」。
    但本题需要我们将从 1 开始,因此在执行「进制转换」操作前,我们需要先对 columnNumbercolumnNumber 执行减一操作,从而实现整体偏移。
class Solution:
    def convertToTitle(self, columnNumber: int) -> str:
        ans = list()
        while columnNumber > 0:
            a0 = (columnNumber - 1) % 26 + 1
            ans.append(chr(a0 - 1 + ord("A")))
            columnNumber = (columnNumber - a0) // 26
        return "".join(ans[::-1])
class Solution:
    def convertToTitle(self, columnNumber: int) -> str:
        ans = list()
        while columnNumber > 0:
            columnNumber -= 1
            ans.append(chr(columnNumber % 26 + ord("A")))
            columnNumber //= 26
        return "".join(ans[::-1])

171. Excel 表列序号

题目:给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。

链接 https://leetcode.cn/problems/excel-sheet-column-number/

个人思路
  1. 其实就是一个26进制转换为十进制:
    先把字符代表的数字储存在字典,循环目标字符串相加
class Solution:
    def titleToNumber(self, columnTitle: str) -> int:
        capitals = {}
        for i in range(1,27):
            capitals[chr(65+i-1)] = i
        ans = 0
        for s in range(1,len(columnTitle)+1):
            ans = ans+26**(s-1)*capitals.get(columnTitle[-s])
        return ans

也可以直接循环,使用ord()把字符转换为数字

class Solution:
    def titleToNumber(self, columnTitle: str) -> int:
        number, multiple = 0, 1
        for i in range(len(columnTitle) - 1, -1, -1):
            k = ord(columnTitle[i]) - ord("A") + 1
            number += k * multiple
            multiple *= 26
        return number

作者:LeetCode-Solution
链接:https://leetcode.cn/problems/excel-sheet-column-title/solution/excelbiao-lie-ming-cheng-by-leetcode-sol-hgj4/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值