LeetCode 168. Excel表列名称

127 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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)

递归思想解题 - Excel表列名称 - 力扣(LeetCode) (leetcode-cn.com)