LeetCode-168-Excel表列名称
in LeetCode with 0 comment

LeetCode-168-Excel表列名称

in LeetCode with 0 comment

原题地址:Excel表列名称

给定一个正整数,返回它在 Excel 表中相对应的列名称。

例如,

    1 -> A
    2 -> B
    3 -> C
    ...
    26 -> Z
    27 -> AA
    28 -> AB 
    ...

示例 1:

输入: 1
输出: "A"

示例 2:

输入: 28
输出: "AB"

示例 3:

输入: 701
输出: "ZY"

辗转相除法

AZ有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)$