数学解法
还记得怎么做的乘法吗?
从右向左,对每对数字进行相乘,并且把最后的值加起来。
我们可以得到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+nfor(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)) ///去掉前缀0sb.append(p);return sb.length()==0?"0":sb.toString();}
