跳至主要內容

168. Excel 表列名称


168. Excel 表列名称

🟢   🔖  数学 字符串  🔗 力扣open in new window LeetCodeopen in new window

题目

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 进制表示。

  1. 初始化一个空字符串 str 用于存储结果。

  2. 循环执行以下操作,直到 columnNumber 为 0:

    • columnNumber 减去 1,因为 Excel 列编号从 1 开始,而字母的 ASCII 码从 0 开始,所以需要在每次取余操作前减去 1,确保取余结果与字母正确对应。
      • 例如:
        • columnNumber = 11 - 1 = 0,对应字母 A
        • columnNumber = 2828 - 1 = 27,取余 27 % 26 = 1,对应字母 B
    • 利用取余操作 columnNumber % 26 获取当前的最低位字母,从最后一个字母开始逐步确定。
    • 使用 String.fromCharCode 将余数转换为对应的字母(通过 A 的 ASCII 值加上余数)。
    • 更新 columnNumber 为整除 26 的结果,移位到下一位。
  3. 返回结果字符串 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;
};

相关题目

题号标题题解标签难度力扣
171Excel 表列序号[✓]数学 字符串🟢🀄️open in new window 🔗open in new window
2194Excel 表中某个范围内的单元格[✓]字符串🟢🀄️open in new window 🔗open in new window