您的位置:首页 > 其它

Leetcode: Excel Sheet Column Title

2015-05-14 04:10 260 查看

Question

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

For example:

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


Credits:

Special thanks to @ifanchu for adding this problem and creating all test cases.

Hide Tags Math

Analysis

This problem is to convert 1-26 to A-Z. Commonly, this kind of problem using ‘mod’ is in range [0,25].

The general equation is

an∗26n+an−1∗26n−1+...+a1∗261+a0a_n *26^n+a_{n-1}*26^{n-1} + ...+a_1 *26^1+a_0

where ai∈[1,26]a_i\in[1,26]

Each time we get the last digit by computing d=n%26. To convert it to be [0,25], we have to decrease the last digit of n by 1.

For example, after get d=a0−1d = a_0 -1, we do n = n/26, so we have

an∗26n−1+an−1∗26n−2+...+a1a_n *26^{n-1}+a_{n-1}*26^{n-2} + ...+a_1

So by doing d=(n-1)%26, we get the number[0,25] for a1a_1.

See solution v2

Solution

v1

The idea of this solution is to lend carry=1 to the lower digit if it is 26.

[code]class Solution:
    # @param {integer} n
    # @return {string}
    def convertToTitle(self, n):
        res = []
        if n<=0:
            return res 

        while(n>0):
            d = n%26
            n = n/26
            if d==0:
                d = 26
                n = n -1 
            res = [ str(unichr(d+64)) ] + res

        return "".join(res)


v2

This is general solution

[code]class Solution:
    # @param {integer} n
    # @return {string}
    def convertToTitle(self, n):
        res = []
        if n<=0:
            return res 

        while(n>0):
            d = (n-1)%26
            res = [ str(unichr(d+65)) ] + res
            n = n/26

        return "".join(res)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: