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
Related Topics 数学 字符串
👍 431 👎 0
2. 题解
2.1 解法1: 先减 1 再取余得低位
本题需要我们将从 11 开始,因此在执行「进制转换」操作前,我们需要先对 columnNumber 执行减一操作,从而实现整体偏移,
同时在添加到字符串结果中时, 需要 +1, 就相当于直接 + ‘A’
class Solution {
public String convertToTitle(int columnNumber) {
StringBuilder sb = new StringBuilder();
int n = columnNumber;
while (n > 0) {
n = n - 1;
int c = n % 26;
sb.append((char) (c + 'A'));
n = n / 26;
}
return sb.reverse().toString();
}
}
2.2 解法2: 十进制转 26 进制
使用先取余再做除法的方法, 转化进制, 每次取余的值是结果的低位
注意点: 由于 26 进制数的范围为 1-26, 所以当每次取余后, 结果为 0 时, 说明为 26, 同时要将原数 n 减去 1
class Solution {
public String convertToTitle(int columnNumber) {
StringBuilder sb = new StringBuilder();
int n = columnNumber;
while (n > 0) {
int c = n % 26;
if (c == 0) {
n = n - 1;
c = 26;
}
sb.append((char) ('A' - 1 + c));
n = n / 26;
}
return sb.reverse().toString();
}
}
参考: 详细通俗的思路分析