跳至主要內容

171. Excel 表列序号


171. Excel 表列序号

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

题目

Given a string columnTitle that represents the column title as appears in an Excel sheet, return its corresponding column number.

For example:

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

Example 1:

Input: columnTitle = "A"

Output: 1

Example 2:

Input: columnTitle = "AB"

Output: 28

Example 3:

Input: columnTitle = "ZY"

Output: 701

Constraints:

  • 1 <= columnTitle.length <= 7
  • columnTitle consists only of uppercase English letters.
  • columnTitle is in the range ["A", "FXSHRXW"].

题目大意

给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号

例如:

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

示例 1:

输入: columnTitle = "A"

输出: 1

示例 2:

输入: columnTitle = "AB"

输出: 28

示例 3:

输入: columnTitle = "ZY"

输出: 701

提示:

  • 1 <= columnTitle.length <= 7
  • columnTitle 仅由大写英文组成
  • columnTitle 在范围 ["A", "FXSHRXW"]

解题思路

  1. 初始化变量 res = 0,用于存储最终结果。
  2. 遍历字符串 columnTitle,从高位到低位,依次将字符对应的数值按权重加到结果中。
    • 计算当前字符的数值 cur = columnTitle.charCodeAt(i) - 'A'.charCodeAt() + 1
    • 权重按从左到右递增的 26 次幂计算,按权重更新结果:res = res * 26 + cur
  3. 遍历结束后,res 即为结果,返回 res

复杂度分析

  • 时间复杂度O(n),其中 n 是字符串 columnTitle 的长度。我们需要遍历字符串一次。
  • 空间复杂度O(1),只使用常量级变量存储中间结果。

代码

/**
 * @param {string} columnTitle
 * @return {number}
 */
var titleToNumber = function (columnTitle) {
	let res = 0; // 初始化结果
	for (let i = 0; i < columnTitle.length; i++) {
		const cur = columnTitle.charCodeAt(i) - 'A'.charCodeAt() + 1; // 计算当前字符数值
		res = 26 * res + cur; // 按 26 进制规则更新结果
	}
	return res; // 返回最终结果
};

相关题目

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