前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Q168 Excel Sheet Column Title

Q168 Excel Sheet Column Title

作者头像
echobingo
发布2018-04-25 16:54:58
5090
发布2018-04-25 16:54:58
举报

Given a positive integer, return its corresponding column title as appear in an Excel sheet.

For example:
代码语言:javascript
复制
 1 -> A
 2 -> B
 3 -> C
 ...
 26 -> Z
 27 -> AA
 28 -> AB 
解题思路:

这题实际上是一个数到由字母A~Z组成的26进制转化问题。

可以观察到以下规律:

代码语言:javascript
复制
 ABCD=A×26³+B×26²+C×26¹+D=1×26³+2×26²+3×26¹+4

但是不能简单的使用 n%26 ,因为:

代码语言:javascript
复制
ZZZZ=Z×26³+Z×26²+Z×26¹+Z=26×26³+26×26²+26×26¹+26

因此,我们可以使用** (n-1) % 26 **去解决该问题。

在构造的过程中,从低位到高位依次构造。

在编程的过程中,可以以以下两个数为例子编写代码:

代码语言:javascript
复制
53  -> BA ->  B*26¹ + A = 2*26 + 1
78  -> BZ  -> B*26¹ + Z = 2*26 + 26
注意点:

在Python中,使用 chr(65) = 'A' 可以将数字转化为 ASCLL,使用 ord('A') = 65 可以将 ASCLL 转化为数字。

Python实现:
代码语言:javascript
复制
class Solution(object):
    def convertToTitle(self, n):
        """
        :type n: int
        :rtype: str
        """
        ans = ''
        while n > 0:
            tem = (n - 1) % 26  # 防止ZZZ这种
            ans = chr(tem + ord('A')) + ans  # 从低位到高位依次构造
            n -= tem  # 减去低位
            n //= 26  # 降幂
        return ans

a = 26*(26**2)+26*(26**1)+26*(26**0)
b = 1*(26**3)+1*(26**2)+1*(26**1)+1*(26**0)
c = Solution()
print(c.convertToTitle(a))  # ZZZ
print(c.convertToTitle(b))  # AAAA
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.02.28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • For example:
  • 解题思路:
  • 注意点:
  • Python实现:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档