LC 0043 [M] Multiply Strings - ALawliet/algorithms GitHub Wiki

class Solution(object):
    def multiply(self, num1, num2):
        res = [0] * (len(num1)+len(num2))

        for i in range(len(num1)-1, -1, -1):
            carry = 0
            
            for j in range(len(num2)-1, -1, -1):
                top = ord(num1[i]) - ord('0')
                bot = ord(num2[j]) - ord('0')
                # carry = (res[i+j+1] + top * bot + carry) // 10
                # drop = (res[i+j+1] + top * bot + carry) % 10
                carry, drop = divmod(res[i+j+1] + top * bot + carry, 10)
                res[i+j+1] = drop
                
            res[i] += carry

        res = ''.join(map(str, res)).lstrip('0')
        # e.g., num1='123', num2='456'; then result = [0, 5, 6, 0, 8, 8], res = [5, 6, 0, 8, 8]
        # deal with leading 0 issue
        return res if res else '0'