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