边工作边刷题: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)

posted @ 2016-05-20 07:19  absolute100  阅读(104)  评论(0编辑  收藏  举报