python-leetcode-168. Excel 表列名称

168. Excel 表列名称 - 力扣(LeetCode)

可以使用 进制转换 的方法来解决这个问题,Excel 的列编号本质上是 26 进制,但从 1 开始,而不是从 0 开始(类似于字母表映射)。

解题思路:

  1. 模拟 26 进制:但与常规进制不同,Excel 列名是从 1 开始的,即:
    • A = 1, B = 2, ..., Z = 26, AA = 27, AB = 28, ..., AZ = 52, BA = 53, ...
  2. 处理进位
    • 先对 columnNumber 进行 -1 处理,使其变成标准的 0-based 索引(类似于 A 映射到 0)。
    • 通过 columnNumber % 26 取出当前列的字母。
    • 通过 columnNumber // 26 继续计算前一位,直到 columnNumber == 0

Python 实现:

def convertToTitle(columnNumber: int) -> str:
    result = []
    while columnNumber > 0:
        columnNumber -= 1  # 调整为 0-based 索引
        remainder = columnNumber % 26
        result.append(chr(ord('A') + remainder))  # 映射到字母
        columnNumber //= 26  # 继续处理前一位
    return ''.join(result[::-1])  # 逆序返回

示例:

print(convertToTitle(1))    # "A"
print(convertToTitle(28))   # "AB"
print(convertToTitle(701))  # "ZY"
print(convertToTitle(2147483647))  # "FXSHRXW"

这个方法的时间复杂度是 O(log26(N)),也就是大约 O(log(N)),非常高效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值