168. Excel 表列名称
168. Excel 表列名称
题目
Given an integer columnNumber
, return its corresponding column title as it appears in an Excel sheet.
For example:
A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...
Example 1:
Input: columnNumber = 1
Output: "A"
Example 2:
Input: columnNumber = 28
Output: "AB"
Example 3:
Input: columnNumber = 701
Output: "ZY"
Constraints:
1 <= columnNumber <= 231 - 1
题目大意
给你一个整数 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"
示例 4:
输入: columnNumber = 2147483647
输出: "FXSHRXW"
提示:
1 <= columnNumber <= 231 - 1
解题思路
题目要求将 Excel 表格列序号(数字)转换为对应的列名称(字母)。这个问题本质是将十进制数字转化为一种特殊的 26 进制表示。
初始化一个空字符串
str
用于存储结果。循环执行以下操作,直到
columnNumber
为 0:- 将
columnNumber
减去 1,因为 Excel 列编号从 1 开始,而字母的 ASCII 码从 0 开始,所以需要在每次取余操作前减去 1,确保取余结果与字母正确对应。- 例如:
columnNumber = 1
:1 - 1 = 0
,对应字母A
。columnNumber = 28
:28 - 1 = 27
,取余27 % 26 = 1
,对应字母B
。
- 例如:
- 利用取余操作
columnNumber % 26
获取当前的最低位字母,从最后一个字母开始逐步确定。 - 使用
String.fromCharCode
将余数转换为对应的字母(通过A
的 ASCII 值加上余数)。 - 更新
columnNumber
为整除 26 的结果,移位到下一位。
- 将
返回结果字符串
str
。
复杂度分析
- 时间复杂度:
O(log26(columnNumber))
,每次循环将columnNumber
缩小约 26 倍,因此最多需要log26(columnNumber)
次操作。 - 空间复杂度:
O(1)
,仅用常量空间存储字符串。
代码
/**
* @param {number} columnNumber
* @return {string}
*/
var convertToTitle = function (columnNumber) {
let str = ''; // 用于存储最终的列名称
while (columnNumber) {
columnNumber -= 1; // 将列号减 1,便于处理 26 进制
str = String.fromCharCode('A'.charCodeAt() + (columnNumber % 26)) + str; // 计算当前字母并拼接
columnNumber = Math.floor(columnNumber / 26); // 更新列号,处理更高位
}
return str;
};
相关题目
题号 | 标题 | 题解 | 标签 | 难度 | 力扣 |
---|---|---|---|---|---|
171 | Excel 表列序号 | [✓] | 数学 字符串 | 🟢 | 🀄️ 🔗 |
2194 | Excel 表中某个范围内的单元格 | [✓] | 字符串 | 🟢 | 🀄️ 🔗 |