[LeetCode] 168. Excel表列名称

题目链接 : https://leetcode-cn.com/problems/excel-sheet-column-title/

题目描述:

给定一个正整数,返回它在 Excel 表中相对应的列名称。

例如,

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

示例:

示例 1:

输入: 1
输出: "A"

示例 2:

输入: 28
输出: "AB"

示例 3:

输入: 701
输出: "ZY"

思路:

做这道题要先了解一下, 十进制转二进制, 比如 6 转 成二进制多少?

 2 |_ 6 _                ^
 	2|_ 3 _  ······ 0    |
     2|_ 1 _ ·······1    |
       |_ 0_ ·······1    |
 	

所以, 我们能得到二进制为 110, 这道题换句话说是十进制转26进制的

但是有个难点: 如果 26 转成 字母是多少?

 26|_ 26 _
 	  1   --- 0

这里出现了0, 但是我们26 字母 没有任何一个字母是表示0, 所以我们可以从 商 借一个给余数

  26| _ 26 _
  		0 ---- 26

这样就可以表示出来了,所以代码如下

class Solution:
    def convertToTitle(self, n: int) -> str:
        res = ""
        while n:
            n, y = divmod(n, 26) 
            if y == 0:
                n -= 1
                y = 26
            res = chr(y + 64) + res
        return res

看了其他做法, 他们先让n 减一

class Solution:
    def convertToTitle(self, n: int) -> str:
        res = ""
        while n:
            n -= 1
            n, y = divmod(n, 26) 
            res = chr(y + 65) + res
        return res

还有一种递归写法:

class Solution:
    def convertToTitle(self, n: int) -> str:
        return "" if n == 0 else self.convertToTitle((n - 1) // 26) + chr((n - 1) % 26 + 65)

posted on 2019-08-06 23:01  威行天下  阅读(170)  评论(0编辑  收藏  举报

导航