边工作边刷题:70天一遍leetcode: day 33-3

Multiply Strings

要点:基本公式就是从低位开始(或者string的高index)两层loop:i,j乘积对应的位置是i+j+1(比如0,0,的位置是1,这里0的位置是进位。另外一定要有高位在0的sense)。
错误点:

  • j是下位乘数的index,因为有进位,所以j要超出0,要更新j-=1
class Solution(object):
    def multiply(self, num1, num2):
        """
        :type num1: str
        :type num2: str
        :rtype: str
        """
        n1 = len(num1)
        n2 = len(num2)
        res = [0]*(n1+n2)
        if num1=="0" or num2=="0": return "0"
        for i in range(n1-1, -1, -1):
            # 1. reset
            carry = 0
            for j in range(n2-1, -1, -1):
                d1 = ord(num1[i])-ord('0')
                d2 = ord(num2[j])-ord('0')
                total = d2*d1+carry+res[i+j+1]
                carry = total/10
                res[i+j+1] = total%10
            
            j-=1
            if carry!=0:
                total = res[i+j+1]+carry
                res[i+j+1]=total%10
            
        if res[0]==0: del res[0]
        resStr = []
        for i in range(len(res)):
            resStr.append(str(res[i]))
        return ''.join(resStr)
                
posted @ 2016-04-15 11:29  absolute100  阅读(80)  评论(0编辑  收藏  举报