题意:
解题思路:
对于 2020 可以看成下边的样子: 210 + 0 10+ 2 10+ 0 10 转成26进制,只需要把基数10换成26=》
226 + 026+ 226+ 026,我们可以从右往左算,依次乘 26 的 0,1,2… 次幂,再累加即可
PHP代码实现:
class Solution {
/**
* @param String $s
* @return Integer
*/
function titleToNumber($s) {
//Time: O(n), Space: O(1)
return $this->titleToNumberR2L($s);
// Time: O(n), Space: O(1)
return $this->titleToNumberL2R($s);
}
//从低位到高位《从26进制最低位开始处理,维护每一位一个base》
function titleToNumberR2L($s) {
$base = 1;
$num = 0;
//ABC = C * 1 + B * 26 + A * 676
for ($i = strlen($s) - 1; $i >= 0; --$i) {
$num += (ord($s[$i]) - 64) * $base;
$base *= 26;
}
return $num;
}
//从高位到低位
function titleToNumberL2R($s) {
$num = 0;
//ABC = (A * 26 + B) * 26 + C = (1 * 26 + 2) * 26 + 3
for ($i = 0; $i < strlen($s); ++$i) {
$num = $num * 26 + (ord($s[$i]) - 64);
}
return $num;
}
}
go代码实现:
func titleToNumber(s string) int {
num := 0
for _, c := range []rune(s) {
num = 26 * num + (int(c-'A') + 1)
}
return num
}