力扣-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:

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

示例 2:

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

示例 3:

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

示例 4:

1
2
输入:columnNumber = 2147483647
输出:"FXSHRXW"
解题思路

将给定的十进制数转换为26进制的形式,其中A表示 1,B 表示2,以此类推。
从给定的数n 开始,每次取余数和商,余数对应A-Z的ASCII码值
将每个余数对应的字符拼接到结果字符串的开头
更新n的值为商,重复上述步骤,直到 n变为0
最终得到的结果字符串即为 Excel表中相对应的列名称。

算法实现
1
2
3
4
5
6
7
8
9
10
var convertToTitle = function(columnNumber) {
let res = ''
while(columnNumber){
columnNumber-- //将1-26映射为0-25
const str = String.fromCharCode(columnNumber%26 + 65) //fromCharCode将unicode转为字符串
res = str + res //str从头插入res
columnNumber = Math.floor(columnNumber / 26)
}
return res
};

时间复杂度分析:
n的大小决定了循的次数,时间复杂度与 n的位数相关,为 0(logN)。
空间复杂度分析:
使用了一个字符串来存储结果,空间复杂度为0(logN)。