力扣 168. Excel表列名称

题目说明

  • 给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。

    例如:

    1
    2
    3
    4
    5
    6
    7
    8
    A -> 1
    B -> 2
    C -> 3
    ...
    Z -> 26
    AA -> 27
    AB -> 28
    ...
  • 提示:

    • 1 <= columnNumber <= 2^31 - 1

示例

示例 1:

1
2
输入:columnNumber = 1
输出:"A"

示例 2:

1
2
输入:columnNumber = 28
输出:"AB"

示例 3:

1
2
输入:columnNumber = 701
输出:"ZY"

示例 4:

1
2
输入:columnNumber = 2147483647
输出:"FXSHRXW"

笔者理解

此题是一道数学算法问题,在力扣题库中被定义为简单题。

解法

当笔者阅读完此题后,发现此题是经典的进制转化加了一点小坑,要注意这里的A是从1开始,所以进行进制转化时,需要多一步操作,让我们来看看具体如何实现的吧。

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
/*
* 进制
*/
public String convertToTitle(int columnNumber) {
StringBuilder sb = new StringBuilder();

while (columnNumber > 0) {
// 本题中数字是从1开始,所以操作数时要减一,这样就能完美转化为26进制
columnNumber--;
sb.append((char) (columnNumber % 26 + 'A'));
columnNumber = columnNumber / 26;
}

// 因为此处是从操作数取余所得,即是从尾部获取得,所以要进行翻转
return sb.reverse().toString();
}
}

时间效率和空间效率都还行,可见此解法还比较适合此题;

image.png

总结

本题是今天的每日一题,难度是为简单,感兴趣的朋友都可以去尝试一下,此题还有其他更多的解法,朋友们可以自己逐一尝试。