原题地址:Excel表列序号
给定一个Excel表格中的列名称,返回其相应的列序号。
例如,
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
示例 1:
输入: "A"
输出: 1
示例 2:
输入: "AB"
输出: 28
示例 3:
输入: "ZY"
输出: 701
按位相加
是 168题 的逆过程。
A
到Z
有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)$
本文由 李海平 创作,采用 知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Aug 5,2020