Easy

题目描述

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

例如:

A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28 
...

示例 1:

输入:columnNumber = 1
输出:"A"

示例 2:

输入:columnNumber = 28
输出:"AB"

示例 3:

输入:columnNumber = 701
输出:"ZY"

提示:

  • 1 <= columnNumber <= 2^31 - 1

解题思路

解题思路

这道题本质上是将十进制数转换为26进制,但有一个特殊之处:Excel的列名没有0,而是从1开始的。

方法分析

核心观察:

  • A-Z 对应 1-26
  • AA 对应 27,相当于 26进制的 “11”,但从1开始计数
  • 这是一个"没有0的26进制"系统

转换规律:

  1. 对于普通的k进制,余数范围是 [0, k-1]
  2. 对于Excel列名,我们需要的范围是 [1, 26]
  3. columnNumber % 26 == 0 时,应该对应 ‘Z’(26)

算法步骤:

  1. 不断除以26取余数
  2. 如果余数为0,说明这一位是’Z’,同时需要向前借位
  3. 将余数转换为对应的字母
  4. 重复直到columnNumber变为0

处理技巧:

  • 在每次计算前,先将columnNumber减1,这样可以将问题转化为标准的26进制转换
  • 或者在余数为0时特殊处理

推荐使用第一种方法(减1法),代码更简洁。

代码实现

class Solution {
public:
    string convertToTitle(int columnNumber) {
        string result = "";
        while (columnNumber > 0) {
            columnNumber--;  // 转换为0-25的范围
            result = char('A' + columnNumber % 26) + result;
            columnNumber /= 26;
        }
        return result;
    }
};
class Solution:
    def convertToTitle(self, columnNumber: int) -> str:
        result = ""
        while columnNumber > 0:
            columnNumber -= 1  # 转换为0-25的范围
            result = chr(ord('A') + columnNumber % 26) + result
            columnNumber //= 26
        return result
public class Solution {
    public string ConvertToTitle(int columnNumber) {
        string result = "";
        while (columnNumber > 0) {
            columnNumber--;  // 转换为0-25的范围
            result = (char)('A' + columnNumber % 26) + result;
            columnNumber /= 26;
        }
        return result;
    }
}
var convertToTitle = function(columnNumber) {
    let result = "";
    while (columnNumber > 0) {
        columnNumber--;  // 转换为0-25的范围
        result = String.fromCharCode('A'.charCodeAt(0) + columnNumber % 26) + result;
        columnNumber = Math.floor(columnNumber / 26);
    }
    return result;
};

复杂度分析

复杂度类型说明
时间复杂度O(log₂₆(n))需要进行约log₂₆(columnNumber)次循环
空间复杂度O(log₂₆(n))结果字符串的长度为log₂₆(columnNumber)

相关题目