美文网首页LeetCode刷题
[LeetCode]168. Excel表列名称

[LeetCode]168. Excel表列名称

作者: 杏仁小核桃 | 来源:发表于2018-11-16 15:55 被阅读7次

    168. Excel表列名称
    给定一个正整数,返回它在 Excel 表中相对应的列名称。
    例如,
    1 -> A
    2 -> B
    3 -> C
    ...
    26 -> Z
    27 -> AA
    28 -> AB
    ...

    解法1

    直接用ASCII码计算.

    class Solution:
        def convertToTitle(self, n):
            res = ""
            while n > 26:
                i = n % 26
                if i == 0:
                    res = "Z" + res
                    n = n//26 -1
                else:
                    n //= 26
                    res = str(chr(ord("@")+i)) + res
            return str(chr(ord("@")+n)) + res
    

    解法2

    定义一个A-Z的字符串, 按位取.

    class Solution:
        def convertToTitle(self, n):
            s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
            a = n
            res = ''
            while(a != 0):
                if a%26 == 0:
                    res = 'Z' + res
                    a = a - 26
                else:
                    res = s[a%26-1] + res
                a //= 26
            return res
    

    同类型的逆向题

    171. Excel表列序号
    给定一个Excel表格中的列名称,返回其相应的列序号。

    解法1

    正序字符逐个计算, 每个字符转换成0~26, 如果还有下一位就将之前的结果乘以26

    class Solution:
        def titleToNumber(self, s):
           chars = list(s)
            num = 0
            for i in chars:
                num = num * 26 + ord(i)-ord("@")
            return num
    

    解法2

    逆序字符逐个计算, 每个字符转换成0~26, 再依次乘以每一位代表的数量级.

    class Solution:
        def titleToNumber(self, s):
           chars = s[::-1]
            num = 0
            for i in range(len(chars)):
                num += (ord(chars[i]) - ord("@")) * (26**i)
            return num
    

    相关文章

      网友评论

        本文标题:[LeetCode]168. Excel表列名称

        本文链接:https://www.haomeiwen.com/subject/ryjmfqtx.html