原题地址:Excel表列名称
给定一个正整数,返回它在 Excel 表中相对应的列名称。
例如,
1 -> A
2 -> B
3 -> C
...
26 -> Z
27 -> AA
28 -> AB
...
示例 1:
输入: 1
输出: "A"
示例 2:
输入: 28
输出: "AB"
示例 3:
输入: 701
输出: "ZY"
辗转相除法
A
到Z
有26个字符,相当于26进制,计算方法参照10进制的计算即可。由于是从1开始计数的,所以计算每一位时都需要先将数字减1.
具体的实现方法如下:
/**
* @param {number} n
* @return {string}
*/
const convertToTitle1 = function(n) {
// 所有的26个字符
let letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
let result = '';
while (n > 0) {
// 由于从1开始,而不是从0开始,要先减1
n --;
// 辗转相除法计算26进制
result = letters[n % 26] + result;
n = Math.floor(n / 26);
}
return result;
};
测试:
let start = new Date();
const test = convertToTitle1;
console.log(test(1)); // A
console.log(test(28)); // AB
console.log(test(701)); // ZY
console.log(new Date().getTime() - start.getTime()); // 2
时间复杂度: 结果的每一位需要一次计算,时间复杂度为$O(N)$,N为结果的位数
空间复杂度: 常数级额外空间,空间复杂度为$O(1)$
本文由 李海平 创作,采用 知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Oct 14,2019