zoukankan      html  css  js  c++  java
  • [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)
    
    
  • 相关阅读:
    团队项目成员和题目
    最大联通子数组
    站立会议5
    关于jsp之间href传参(中文)乱码问题
    站立会议4
    典型用户和用户场景描述
    站立会议3
    站立会议2
    站立会议1
    第七周学习进度情况
  • 原文地址:https://www.cnblogs.com/powercai/p/11312443.html
Copyright © 2011-2022 走看看