Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2, also represented as a string.
- Example 1:
Input: num1 = “2”, num2 = “3”
Output: “6” - Example 2:
Input: num1 = “123”, num2 = “456”
Output: “56088”
Note:
The length of both num1 and num2 is < 110.
Both num1 and num2 contain only digits 0-9.
Both num1 and num2 do not contain any leading zero, except the number 0 itself.
You must not use any built-in BigInteger library or convert the inputs to integer directly.
解法
把两个数中的每一位相乘存到数组中的对应位,然后从低位开始处理每一位的进位,手写两个数相乘再结合代码会比较好理解。
index: 0 1 2 3 4
1 2 3
* 4 5
---------
1 5
1 0
0 5
---------
1 2
0 8
0 4
---------
0 5 5 3 5
public String multiply(String num1, String num2) {
int n=num1.length(),m=num2.length();
int[] sums=new int[m+n];
int k=n+m-2,carry=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
sums[k-i-j]+=(num1.charAt(i)-'0')*(num2.charAt(j)-'0');
}
}
for(int i=0;i<n+m;i++)
{
sums[i]+=carry;
carry=sums[i]/10;
sums[i]=sums[i]%10;
}
int i=n+m-1;
while(i>=0&&sums[i]==0)
--i;
if(i<0)
return "0";
String res="";
while(i>=0)
{
res=res+sums[i--];
}
return res;
}
Runtime: 11 ms, faster than 97.52% of Java online submissions for Multiply Strings.
Memory Usage: 38.5 MB, less than 84.50% of Java online submissions for Multiply Strings.