当前位置:   article > 正文

LeetCode - 168. Excel表列名称

LeetCode - 168. Excel表列名称

168. Excel表列名称

给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。例如:

A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28 
...


二进制与十进制之间的转换

在做这题之前,先复习一下二进制与十进制之间是怎么转换的

(一)二进制转十进制

如二进制下的100,转为十进制,为:0*2^0 + 0*2^1 + 1*2^2 = 4

二进制下的101,转为十进制,为:1*2^0 + 0*2^1 + 1*2^2 = 5

思路就是:

  • 2的幂次方的数字,怎么获取:这个数字是每次+1的
  • 2的幂次方乘的那个数字,怎么获取:这个数字其实就是原始二进制数的最后一位,可以用x%2表示;同时要注意 x 通过每次 //10,将最后一位的那个数从右往左依次移动
  1. class Solution:
  2. def convertToTitle(self, columnNumber: int) -> str:
  3. x = 10101
  4. y = 0
  5. t = 0
  6. '''
  7. x = 10101 t=0
  8. 1*2^0
  9. x = 1010 t=1
  10. 0*2^1
  11. x = 101 t=2
  12. 1*2^2
  13. x = 10 t=3
  14. 0*2^3
  15. x = 1 t=4
  16. 1*2^4
  17. x = 0
  18. '''
  19. while x:
  20. y += (2**t)*(x%2)
  21. x //= 10
  22. t += 1
  23. print(y)

(二)十进制转二进制

怎么转的,以十进制100转换为二进制为例,看下面这个图就明白了: 

代码实现如下:

  1. class Solution:
  2. def convertToTitle(self, columnNumber: int) -> str:
  3. x = 100
  4. y = ''
  5. while x:
  6. t = x%2
  7. # ord() char -> num
  8. # chr() num -> char
  9. y = chr(ord('0')+t) + y
  10. x //= 2
  11. print(y)


168题Python代码 

(一)思路一 

最后再来分析一下本题:它给出的数是【每一位都是从1开始的二十六进制数

思路:在转换过程中将每一位都减1,这样就得到了正常的、从0开始的二十六进制数,然后再把它表示成字母表示的二十六进制数即可

(代码跟上面的十进制转二进制几乎差不多,理解了这个,本题就好懂了)

  1. class Solution:
  2. def convertToTitle(self, x: int) -> str:
  3. y = ''
  4. while x:
  5. x -= 1
  6. t = x%26
  7. # ord() char -> num
  8. # chr() num -> char
  9. y = chr(ord('A')+t) + y
  10. x //= 26
  11. return y

 

(二)思路二 

参考这个视频: 168-Excel表列名称-Python3_哔哩哔哩_bilibili

  1. class Solution:
  2. def convertToTitle(self, x: int) -> str:
  3. res = []
  4. while x:
  5. res.append( chr(ord("A")+(x-1)%26) )
  6. x = (x-1)//26
  7. return "".join(res[::-1]) # 反转,第一个算出来的字母应放在字符串最后面

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/730726
推荐阅读
相关标签
  

闽ICP备14008679号