Document

2020-03-16
Excel表列名称
1 -> A。
2 -> B:
26 -> Z
27 -> AA
28 -> AB

示例:

输入: s = "LEETCODEISHIRING", numRows = 3
输出: LCIRETOESIIGEDHN
输入: s = "LEETCODEISHIRING", numRows = 4
输出: LDREOEIIECIHNTSG
解释:
L D R
E O E I I
E C I H N
T S G

-->
说明:

  • 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

-->

题解:
思路1:数学
/**
* @param {number} n
* @return {string}
*/
var convertToTitle = function (n) {
let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; // 26个字母数组
let i;
let result = []; // 空数组放每一位对应的字母
while (n > 26) { // 当n大于26时说明不止一位
i = Math.floor(n % 26); // n/26取余数,余数就是此时最低位对应的字母
if(i === 0) { // 当n是26的倍数是取余为0,要做特殊处理
i = 26; // 例如当n=52, ÷26取余为0 而此时对应的值应该是Z 所以赋值26
n--; // 当取余为0时, 下面对n/26取整会多1,所以减去1那么取整时也会小1
}
result.unshift(str[i - 1]); // 向数组的最前面插入对应字母
n = Math.floor(n / 26); // n÷26取整判断是否要进行下一次循环
}
result.unshift(str[n - 1]); // 退出循环后要把剩下的n也插入到最前面
return result.join(''); // 返回字符串类型
};