Excel表列名称
难度:
标签:
题目描述
给你一个整数 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
代码结果
运行时间: 13 ms, 内存: 16.0 MB
// Solution in Java using Java Stream
// Problem: Convert a given column number to its corresponding Excel column name.
// Approach: Similar to the basic Java solution but demonstrates a more functional approach using streams and StringBuilder.
// Note: This problem doesn't inherently benefit much from Stream API, but we use it to showcase a different style.
import java.util.stream.IntStream;
public class SolutionStream {
public String convertToTitle(int columnNumber) {
StringBuilder result = new StringBuilder();
IntStream.iterate(columnNumber, num -> num > 0, num -> (num - 1) / 26)
.forEach(num -> result.append((char) ((num - 1) % 26 + 'A')));
return result.reverse().toString(); // Reverse to get the correct column title
}
}
解释
方法:
这个题解使用了类似进制转换的思想。首先将给定的列号不断对26取模,得到各位的数字(实际对应字母的ASCII码),然后将列号整除26。重复该过程直到列号小于等于26。最后将得到的各位数字根据ASCII码转换为对应的字母,即可得到Excel表列名称。需要注意的是,由于Excel表列名称中不存在数字0,因此在每次取模后需要特殊处理余数为0的情况。
时间复杂度:
O(log n)
空间复杂度:
O(log n)
代码细节讲解
🦆
在处理Excel列编码时,为什么在余数为0时,需要特别将columnNumber减1再继续处理?
▷🦆
在循环中,每次都是对26取模,这种方法是否能保证所有大于26的数都能正确转换成Excel列名?
▷🦆
你如何处理columnNumber正好等于26的情况,为什么在最后还需要单独处理最高位数字?
▷🦆
在将数字转换为对应的ASCII字符时,使用的是`chr(temp + 64)`,为什么选用64作为基准数字?
▷相关问题
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"]
内