题意:

image.png

解题思路:

对于 2020 可以看成下边的样子: 210 + 0 10+ 2 10+ 0 10 转成26进制,只需要把基数10换成26=》
226 + 026+ 226+ 026,我们可以从右往左算,依次乘 26 的 0,1,2… 次幂,再累加即可

PHP代码实现:

  1. class Solution {
  2. /**
  3. * @param String $s
  4. * @return Integer
  5. */
  6. function titleToNumber($s) {
  7. //Time: O(n), Space: O(1)
  8. return $this->titleToNumberR2L($s);
  9. // Time: O(n), Space: O(1)
  10. return $this->titleToNumberL2R($s);
  11. }
  12. //从低位到高位《从26进制最低位开始处理,维护每一位一个base》
  13. function titleToNumberR2L($s) {
  14. $base = 1;
  15. $num = 0;
  16. //ABC = C * 1 + B * 26 + A * 676
  17. for ($i = strlen($s) - 1; $i >= 0; --$i) {
  18. $num += (ord($s[$i]) - 64) * $base;
  19. $base *= 26;
  20. }
  21. return $num;
  22. }
  23. //从高位到低位
  24. function titleToNumberL2R($s) {
  25. $num = 0;
  26. //ABC = (A * 26 + B) * 26 + C = (1 * 26 + 2) * 26 + 3
  27. for ($i = 0; $i < strlen($s); ++$i) {
  28. $num = $num * 26 + (ord($s[$i]) - 64);
  29. }
  30. return $num;
  31. }
  32. }

go代码实现:

  1. func titleToNumber(s string) int {
  2. num := 0
  3. for _, c := range []rune(s) {
  4. num = 26 * num + (int(c-'A') + 1)
  5. }
  6. return num
  7. }