原题链接:
https://leetcode.cn/problems/excel-sheet-column-number/
解题思路:
- 先回忆一下10进制数的计算方式,假设
321
,计算式为:result = 3 * 10^2 + 2 * 10^1 + 1 * 10^0
。 - 那么对于该题,即为计算26进制数,将上面算式中的10替换为26即可。
function titleToNumber(columnTitle: string): number {
let result: number = 0 // 缓存结果
let baseCode: number = 'A'.charCodeAt(0) // 缓存A的Code,用于计算26个英文字母的Code
// 生成一个哈希表,缓存26个字母对应的数字
let map: Map<string, number> = new Map(
Array.from({ length: 26 }, (item, index) => [
String.fromCharCode(baseCode + index),
index + 1,
]),
)
// i代表当前位的值,j代表26的j次幂
// i和j相当于两个指针,分别从两端向中间推进
// 按照计算式,不断累加result即可
for (
let i = 0, j = columnTitle.length - 1;
i < columnTitle.length;
i++, j--
) {
result += map.get(columnTitle[i]) * Math.pow(26, j)
}
return result
};