题目描述
给定一个正整数,返回它在 Excel 表中相对应的列名称。
例如,
1 -> A
2 -> B
3 -> C
…
26 -> Z
27 -> AA
28 -> AB
示例 1:
输入: 1
输出: “A”
示例 2:
输入: 28
输出: “AB”
示例 3:
输入: 701
输出: “ZY”
思路
首先要理解进制转换,参考:https://zhuanlan.zhihu.com/p/75006709
本题中需要注意不是直接的10进制转26进制,个位范围是1-26,而不是一般进制转换的0-25。
代码
public String convertToTitle(int n) {
StringBuilder sb = new StringBuilder();
while (n > 0) {
int c = n % 26;
if(c == 0){
c = 26;
n -= 1;
}
sb.insert(0, (char) ('A' + c - 1));
n /= 26;
}
return sb.toString();
}
此处的
(char) (‘A’ + c - 1)
是通过对 A 的偏移,强制将整数转为了字符。
比如 c = 3,那么 ‘A’ + c - 1,会把 A 根据 ASCII 码值转为 65,然后计算 65 + c - 1 = 65 + 3 - 1 = 67,然后 (char)67,根据 ASCII 码值就刚好是字符 C。