边工作边刷题:70天一遍leetcode: day 5
Excel Sheet Column Number
Excel Sheet Column Title
要点:
数字=>字母:基本上和10进制计数类似,区别是起始值为1,所以进位和起始值是一样的。而不像10进制,起始为0,进位为1。这里只在’Z’特殊处理,因为余数为0并不表示进位,而是最后一个字母’Z'(因为按照前面的规则,进位应该是1)。但是处理是逐位26取余得到的,所以还要在这种情况下n-=1,这样使得/26没有进位
这题想起来很费劲,谁有更好的理解吗?
字母=>数字:这个方向比较容易,因为知道26一循环,直接公式搞定,不用特殊处理
class Solution(object):
def titleToNumber(self, s):
"""
:type s: str
:rtype: int
"""
res = 0
for c in s:
res = res*26 + ord(c)-ord('A')+1
return res
class Solution(object):
def convertToTitle(self, n):
"""
:type n: int
:rtype: str
"""
s = list()
while n:
c = n%26
if c==0:
s.append('Z')
n-=1
else:
s.append(chr(ord('A')+c-1))
n/=26
s.reverse()
return ''.join(s)