题目描述:
题目解答:
题目的解答可以参考下面一张图片(来源于leetcode discuss的热心网友),题目的解答方法来源于小学三年级学数学时的方法。
class Solution {
public String multiply(String num1, String num2) {
int len_num1=num1.length(),len_num2=num2.length();
int[] data=new int[len_num1+len_num2];
for(int i=len_num1-1;i>=0;i--){
for(int j=len_num2-1;j>=0;j--){
int tempMulti=(num1.charAt(i)-'0')*(num2.charAt(j)-'0');
int index1=i+j;
int index2=i+j+1;
int sum=data[index2]+tempMulti;
data[index1]+=sum/10;
data[index2]=sum%10;
}
}
//拼接数据
StringBuilder sb=new StringBuilder();
for(int i=0;i<len_num1+len_num2;i++){
if(data[i]==0&&sb.length()==0){
continue;
}else{
sb.append(data[i]);
}
}
if(sb.length()==0){
return "0";
}else{
return sb.toString();
}
}
}
运行结果:
简洁版的代码:
public String multiply(String num1, String num2) {
int m = num1.length(), n = num2.length();
int[] pos = new int[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');
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)) sb.append(p);
return sb.length() == 0 ? "0" : sb.toString();
}