Excel 表列序号
难度:
标签:
题目描述
给你一个字符串 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"]
内
代码结果
运行时间: 20 ms, 内存: 16.0 MB
// Java solution using Java Stream for converting Excel column title to number
// The approach is similar to the previous solution but utilizes streams to calculate the result.
// We use the IntStream to iterate over the characters, map them to their positional values, and then use reduce to accumulate the result.
import java.util.stream.IntStream;
public class Solution {
public int titleToNumber(String columnTitle) {
return IntStream.range(0, columnTitle.length())
.map(i -> columnTitle.charAt(i) - 'A' + 1)
.reduce(0, (result, charValue) -> result * 26 + charValue);
}
}
解释
方法:
这个解法的思路是将字符串从左到右遍历,把每个字符视为26进制的一位数。遍历时,不断将之前的结果乘以26,再加上当前字符代表的数值。其中字符到数值的转换通过 ASCII 码实现,即用字符的 ASCII 码减去大写字母 A 的 ASCII 码 64。最终遍历完整个字符串,得到的结果就是列名称对应的列序号。
时间复杂度:
O(n)
空间复杂度:
O(1)
代码细节讲解
🦆
为什么在字符到数值的转换中使用 `ord(c) - 64` 而不是 `ord(c) - 65`,考虑到 'A' 的 ASCII 码是 65?
▷🦆
给定字符串的最大长度为7,这是否意味着算法可以处理到Excel的所有可能列?如何计算最大列名对应的数值?
▷🦆
考虑到字符串只包含大写字母,是否有可能通过并行处理或向量化操作来加速这个转换过程?
▷🦆
在你的代码中有没有考虑到非法输入,例如小写字母或特殊字符,如果有这样的输入,你的代码会如何处理?
▷