一、题目描述
给你一个整数 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 <= 231 - 1
二、思路分析
- 首先我们可以先定义一个
map对象,将这些字符都映射出来 - 我们最先能够判断
columnNumber小于 26 的情况 - 当大于26的要怎么处理呢?以
28为例,需要得到AB,那么我们反推- 如何得到
A和B呢? - 我们可以通过
columnNumber % 26得到2,这样就可以通过map[2] --> B columnNumber / 26向下取整 得到1,map[1] --> A
- 如何得到
- 特殊情况:整除情况,例如 52 ---> AZ,我们希望得到 1 和 26, 实际得到 0 和 2,所以需要在
0的时候做些处理就好了
三、代码答案
/**
* @param {number} columnNumber
* @return {string}
*/
var convertToTitle = function (columnNumber) {
let map = {
1: 'A',
2: 'B',
3: 'C',
4: 'D',
5: 'E',
6: 'F',
7: 'G',
8: 'H',
9: 'I',
10: 'J',
11: 'K',
12: 'L',
13: 'M',
14: 'N',
15: 'O',
16: 'P',
17: 'Q',
18: 'R',
19: 'S',
20: 'T',
21: 'U',
22: 'V',
23: 'W',
24: 'X',
25: 'Y',
26: 'Z',
}
const arr = []
while (columnNumber > 26) {
let a = columnNumber % 26
if (a === 0) {
arr.unshift('Z')
columnNumber--
} else {
arr.unshift(map[a])
}
columnNumber = Math.floor(columnNumber / 26)
}
arr.unshift(map[columnNumber])
return arr.join('')
};