168. Excel 表列名称 - 力扣(LeetCode)
可以使用 进制转换 的方法来解决这个问题,Excel 的列编号本质上是 26 进制,但从 1 开始,而不是从 0 开始(类似于字母表映射)。
解题思路:
- 模拟 26 进制:但与常规进制不同,Excel 列名是从 1 开始的,即:
A = 1, B = 2, ..., Z = 26, AA = 27, AB = 28, ..., AZ = 52, BA = 53, ...
- 处理进位:
- 先对
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))
,非常高效。