数学解法
还记得怎么做的乘法吗?
从右向左,对每对数字进行相乘,并且把最后的值加起来。
我们可以得到num1[i]*num2[j]的值最终会被放到[i+j,i+j+1]上
解法如下所示
public String multiply(String num1, String num2) {
int m = num1.length(),n = num2.length();
int[] pos = new int[m+n]; //最终相乘的长度为m+n
for(int i= m-1;i>=0;i--){ //从后向前遍历
for(int j=n-1;j>=0;j--){
//计算相乘的值
int mul =(num1.charAt(i) - '0') * (num2.charAt(j) - '0');
//p1为进位所在下标 p2为个位数所在位置
int p1 = i+j,p2=i+j+1;
//加上低位的进位
int sum = mul+pos[p2];
//累加进位
pos[p1]+=sum/10;
//个位直接更新
pos[p2]=sum%10;
}
}
StringBuilder sb = new StringBuilder();
for(int p:pos)
if(!(sb.length()==0&&p==0)) ///去掉前缀0
sb.append(p);
return sb.length()==0?"0":sb.toString();
}