LeetCode-171-Excel表列序号
in LeetCode with 0 comment

LeetCode-171-Excel表列序号

in LeetCode with 0 comment

原题地址:Excel表列序号

给定一个Excel表格中的列名称,返回其相应的列序号。

例如,

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

示例 1:

输入: "A"
输出: 1

示例 2:

输入: "AB"
输出: 28

示例 3:

输入: "ZY"
输出: 701

按位相加

168题 的逆过程。

AZ有26个字符,相当于26进制,计算方法参照10进制的计算即可。

具体实现方法如下:

/**
 * @param {string} s
 * @return {number}
 */
const titleToNumber1 = function(s) {
    let letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    let result = 0; // 结果
    let base = 1; //每一位的基数,即26^0=1
    // 从低位开始
    for (let i = s.length - 1; i >= 0; i --) {
        // 按位相加,注意indexOf是从0开始的,要先加1
        result += base * (letters.indexOf(s[i]) + 1);
        base *= 26;
    }
    return result;
};

测试:

let start = new Date();
const test = titleToNumber1;
console.log(test('A')); // 1
console.log(test('AB')); // 28
console.log(test('ZY')); // 701
console.log(new Date().getTime() - start.getTime()); // 5

时间复杂度: 每一位需要一次计算,时间复杂度为$O(N)$,N为列名称的位数
空间复杂度: 常数级额外空间,空间复杂度为$O(1)$