题目
给你一个整数
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(""); };