题解和思路
- 思路
* 因为有26个字母,相当于 26 进制转 10 进制
* 详解
* 1. 26 进制 转化 10 进制公式,ans = ans * 26 + num
* 2. 比如:AB = 126 +2 = 28,ZY=2626+25 = 701
* 示例
* A->1
* B->2
* C->3
* ...
* Z->26
* AA->27
* AB->28
* 输入: "A",
* 输出:1
* 输入: "AB",
* 输出: 28
代码如下
const titleToNumber = function(s){
const arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
const len = s.length;
let sum = 0;
for (let index = 0; index < len; index++) {
const tempLeft = arr.indexOf(s[index]) + 1;
const tempRight = Math.pow(26,len - 1 - index);
sum = tempLeft * tempRight + sum;
}
return sum;
}
ps
:进制转换的问题,26的N次方
- 复杂度分析
- 时间复杂度: O(n) 对于每个元素,通过一次遍历数组的其余部分来寻找它所对应的目标元素,这将耗费 O(n)
的时间。 - 空间复杂度: O(1)
- 由于算法中临时变量得个数与循环次数无关,所以空间复杂度为 O(1)
网友评论