开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情
题目
给你一个整数
columnNumber,返回它在 Excel 表中相对应的列名称。
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
思路一
我们先定义一个arr数组并将26个字母放入,我们为了计算方便,在头部额外加个Z,因为数组的下标是从0开始的,然后进行判断如果当前形参n小于等于26则直接返回对应的arr数组的n位置元素,在声明一个i变量记录余数字符,声明一个str变量记录字符串,在使用循环,进行循环当前形参n大于26的情况,在循环中,我们更新i变量和n变量以及str变量,最后n形参肯定是小于26的,所以我们将其对应于数组中的字符添加到str字符串的头部并返回出去
/**
* @param {number} n
* @return {string}
*/
var convertToTitle = function(n) {
let arr = ['Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
if(n<=26){
return arr[n]
}
let i = ''
let str = ''
while(n>26){
i = a[n%26]
n = Math.ceil(n/26)-1
str = i + str
}
str = arr[n] + str
return str
};
思路二
我们先声明一个res变量用于存放结果,在声明一个Map数据结构,将26个字符全部放进去,然后使用循环进行判断当前columnNumber形参是否大于0,如果是则使用用余数取字符,并赋值给cur变量,在将其添加到res变量的头部,最后使用Math.floor更新columnNumber形参值,最后使用join方法把res数组转换成字符串并返回出去
/**
* @param {number} columnNumber
* @return {string}
*/
var convertToTitle = function(columnNumber) {
let res = [];
let map = new 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"]]);
while(columnNumber > 0){
let cur = columnNumber % 26 ? columnNumber % 26 : 26;
res.unshift(map.get(cur));
columnNumber = Math.floor((columnNumber - cur) / 26);
}
return res.join("");
};