LeetCode刷题

[LeetCode]168. Excel表列名称

2018-11-16  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读