168. Excel表列名称

114 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情

一、题目描述:

168. Excel表列名称 - 力扣(LeetCode)

给你一个整数 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

二、思路分析:

类似于26进制,对比于10十进制转2进制的算法,这列需要改一下 在判断余数的时候,如果为0,可以将余数置为26,然后columnNumber减1,为了避免增大n带来的判断异常

三、AC 代码:

class Solution {
    public String convertToTitle(int columnNumber) {
        StringBuffer s = new StringBuffer();
        while(columnNumber > 0){
            int n = columnNumber % 26;
            if(n == 0){
                n = 26;
                columnNumber --;
            }
            s.append((char)('A' + n - 1));
            columnNumber /= 26;
        }
        return new String(s.reverse());
    }
}

四、总结:

这题本是不难,就是有个细节需要注意下,就是本题我们需要从1开始,而不是0。

转换为数学解法的话,应该就是每循环到一个维度时,先减去一个完整的维度再余出结果。
也就是数学解法为什么要先减 1 之后再按 26 取余。

范文参考:

168.Excel表列名称 excel表名称与数字互转,思路分析与解题对比! - Excel表列名称 - 力扣(LeetCode)

168. Excel表列名称 不断取余整除获得每位的字符 Javascript 版 - Excel表列名称 - 力扣(LeetCode)

执行用时: 0 ms , 在所有 C++ 提交中击败了 100.00% 的用户 - Excel表列名称 - 力扣(LeetCode)

这根本不是进制转换。。。为什么都在讨论进制转换? - Excel表列名称 - 力扣(LeetCode)