开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情
1.描述
168. Excel表列名称 - 力扣(LeetCode) (leetcode-cn.com)
给你一个整数 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 <= 2^31 - 1
2.分析
- 首先这可以理解为一道进制转换题,由十进制转为26进制
- 需要注意的是该26进制和普通进制不同的是:第一位是1,最后一位是26(而十进制是第一位是0,最后一位是9)
- 因此只需要把columnNumber每次-1再取余就可以转为从0开始,然后整除26继续循环取余,余数放入char缓冲区
- 还需注意一个点,得到的余数如果是0代表A,A的ASCII码是65,因此余数+65转为char放入缓冲区
- 最后反转缓冲区输出成String即可
3.AC代码
class Solution {
public String convertToTitle(int columnNumber) {
StringBuilder sb = new StringBuilder();
while (columnNumber>0){
columnNumber--;
sb.append((char)(columnNumber%26 + 65));
columnNumber/=26;
}
sb.reverse();
return sb.toString();
}
}
4.总结
26进制但是又不全是26进制。
将十进制整数转换成 特殊的二十六进制数【0-25】---【1-26】-->【A-Z】 如将十进制数26应当转换成【Z】 26%26+'A'='A' 结果不对 ,但是我们将(26-1)%26 + ‘A’=Z正确的。 所以,我们再计算的时候,将十进制数整体偏移一位,进行操作。
对于取模的问题,需要一些数学知识,如果不是太熟悉的话,除了补充知识的途径外,还可以用一些具体的数字多多观察规律。
参考
独特的思路解释为什么每次循环要减一 - Excel表列名称 - 力扣(LeetCode) (leetcode-cn.com)