Multiply Strings

Problem: Multiply Strings

The general idea is to multiply A by each digit in B and then add them together.

Code in Python:

class Solution(object):
    def multiply(self, num1, num2):
        """
        :type num1: str
        :type num2: str
        :rtype: str
        """
        if num1 == "0" or num2 == "0": return "0"
        res, base, num1, num2 = [], 0, [int(x) for x in num1[::-1]], [int(y) for y in num2[::-1]]
        for x in num1:
            level, carry = [], 0
            for y in num2:
                p = x * y
                level = [(p + carry) % 10] + level
                carry = (p + carry) / 10
            if carry: level = [carry] + level
            res = self.add(res, level + [0] * base)
            base += 1
        return "".join([str(x) for x in res])

    def add(self, num1, num2):
        if not num1: return num2
        if not num2: return num1
        i, m, n, carry, res = -1, len(num1), len(num2), 0, []
        while -i <= m and -i <= n:
            s = num1[i] + num2[i]
            res = [(s + carry) % 10] + res
            carry = 1 if s + carry >= 10 else 0
            i -= 1
        if -i <= m: res = self.add(num1[:i+1], [1]) + res if carry else num1[:i+1] + res
        elif -i <= n: res = self.add(num2[:i+1], [1]) + res if carry else num2[:i+1] + res
        elif carry: res = [1] + res
        return res

Code in Java:

public class Solution {
        public String multiply(String a, String b) {
            int i1 = a.length();
            int i2 = b.length();
            if (i1 == 0 && i2 == 0) return "";
            if (i1 > i2)  return getAnswer(a.toCharArray(), b.toCharArray());
            else  return getAnswer(b.toCharArray(), a.toCharArray());

        }
        public static String getAnswer(char[] n1, char [] n2){
            int l1 = n1.length;
            int l2 = n2.length;
            int carry = 0;
            int [] result = new int[l1 + l2];
            int c1 = 0, c2 =0;
            for (int i = l2 -1 ; i >=0 ; i--){
                int val1 = n2[i] - '0';
                int res = 0;
                carry = 0; c2 = 0;
                for (int j = l1 - 1; j >= 0; j-- ){
                    int val2 = n1[j] - '0';
                    res = val1 * val2 + carry+ (result[c1+c2] );
                    carry = res /10;
                    res = res % 10;
                    result[c1 + c2] = res; 
                    c2++;
                }
                while (carry > 0) {
                    res = (result[c1+c2] ) + carry;
                    carry = res /10;
                    res = res % 10;
                    result[c1 + c2] =res; 
                    c2++;
                }
                c1++;
            }
            int len = result.length;
            while(result[len-1 ]  == 0){
                len--;
                if(len == 0)  return Integer.toString(0);
            } 

            char [] finalResult = new char[len];
            for (int i = 0 ; i< len; i++){
                 finalResult[len - i -1] =    (char)(result[i] + 48);
            }
            return new String(finalResult);
        }
    }

results matching ""

    No results matching ""