题意:
解题思路:
对于 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 * 676for ($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 + 3for ($i = 0; $i < strlen($s); ++$i) {$num = $num * 26 + (ord($s[$i]) - 64);}return $num;}}
go代码实现:
func titleToNumber(s string) int {num := 0for _, c := range []rune(s) {num = 26 * num + (int(c-'A') + 1)}return num}
