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);
}
}