题目描述:

题目解答:
题目的解答可以参考下面一张图片(来源于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();
}

本文详细解析了如何使用小学数学中的乘法原理解决字符串乘法问题。通过LeetCode上的一道经典题目,介绍了一种高效的算法实现方式,利用数组进行中间结果的存储和进位处理,最后将数组转换为字符串返回。文章提供了简洁版代码示例,帮助读者更好地理解和应用该算法。
227

被折叠的 条评论
为什么被折叠?



