leetcode - 168. Excel Sheet Column Title

Description

Given an integer columnNumber, return its corresponding column title as it appears in an Excel sheet.

For example:

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

Example 1:

Input: columnNumber = 1
Output: "A"

Example 2:

Input: columnNumber = 28
Output: "AB"

Example 3:

Input: columnNumber = 701
Output: "ZY"

Constraints:

1 <= columnNumber <= 2^31 - 1

Solution

Solved after others’ solution…

It’s not a standard base transformation problem, because there’s no 0s in this. For example, z is 26, and 27 is not a0 but aa.

Let’s write more examples:

A   1     AA    26+ 1     BA  2×26+ 1     ...     ZA  26×26+ 1     AAA  1×26²+1×26+ 1
B   2     AB    26+ 2     BB  2×26+ 2     ...     ZB  26×26+ 2     AAB  1×26²+1×26+ 2
.   .     ..    .....     ..  .......     ...     ..  ........     ...  .............   
.   .     ..    .....     ..  .......     ...     ..  ........     ...  .............
.   .     ..    .....     ..  .......     ...     ..  ........     ...  .............
Z  26     AZ    26+26     BZ  2×26+26     ...     ZZ  26×26+26     AAZ  1×26²+1×26+26

So now we know, for ABCD it denotes: 1 ∗ 2 6 3 + 2 ∗ 2 6 2 + 3 ∗ 26 + 4 1*26^3+2*26^2+3*26+4 1263+2262+326+4

When in standard base transformation, we would have A as 0, B as 1, so here the rule for ABCD is actually like: 1 ∗ 2 6 3 + 2 ∗ 2 6 2 + 3 ∗ 26 + 4 = ( A + 1 ) ∗ 2 6 3 + ( B + 1 ) ∗ 2 6 2 + ( C + 1 ) ∗ 26 + ( D + 1 ) 1*26^3+2*26^2+3*26+4=(A+1)*26^3+(B+1)*26^2+(C+1)*26+(D+1) 1263+2262+326+4=(A+1)263+(B+1)262+(C+1)26+(D+1)

Then by subtract 1 every time we would get the right answer.

Time complexity: log ⁡ ( n ) \log(n) log(n)
Space complexity: o ( 1 ) o(1) o(1)

Code

class Solution:
    def convertToTitle(self, columnNumber: int) -> str:
        convert_map = {i: chr(ord('A') + i) for i in range(26)}
        res = ''
        while columnNumber > 0:
            columnNumber -= 1
            cur_digit = columnNumber % 26
            res += str(convert_map[cur_digit])
            columnNumber //= 26
        return res[::-1]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值