给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。
例如:
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
示例 1:
输入: columnTitle = "A"
输出: 1
示例 2:
输入: columnTitle = "AB"
输出: 28
示例 3:
输入: columnTitle = "ZY"
输出: 701
提示:
- 1 <= columnTitle.length <= 7
- columnTitle 仅由大写英文组成
- columnTitle 在范围 [“A”, “FXSHRXW”] 内
解题思路
1.本质:26进制 ==> 10进制 (只不过A为1,B为2…)
2.利用charCodeAt()可以得到对应的Unicode码,然后减去64即为字母所代表的数字。这样就不需要用map来存储数据了,然后直接用进制转换方法计算并相加起来即可
代码
/**
* @param {string} columnTitle
* @return {number}
*/
var titleToNumber = function(columnTitle) {
let len = columnTitle.length, res = 0
for (let i = 0; i < len; i++) {
// A的Unicode码是65 这样所有的字母取码后-64即其所代表的数字
res += (columnTitle[i].charCodeAt() - 64) * (26 ** (len - 1 - i))
}
return res
};