题目链接:LeetCode43
分析:无
思路:我的思路:模拟竖式乘法。
题解的思路:
解法一,分解乘法为加法,模拟加法。
解法二, 模拟乘法,解法二变种,写成多项式子,对于答案字符的每一个位置计算别人对它的贡献,而不是解法二的计算当前位置对别人的贡献。
解法三,对解法二变种用快速博里叶变化加速卷积的计算,
(这就不用了吧 )自行了解。
我的代码:
class Solution {
public String multiply(String num1, String num2) {
int n=num1.length(),m=num2.length();
int []ans=new int[225];
int index=225-n;
for(int i=n-1;i>=0;i--){
int k=index+i;
for(int j=m-1;j>=0;j--){
if(ans[k]>10){
ans[k-1]++;
ans[k]-=10;
}
int t=(num1.charAt(i)-'0')*(num2.charAt(j)-'0')+ans[k];
ans[k-1]+=t/10;
ans[k]=t%10;
k--;
}
}
int cnt=0;
boolean f=false;
char[] chars=new char[225];
for(int i=0;i<225;i++){
if(!f&&ans[i]!=0)f=true;
if(f){
chars[cnt++]=(char)(ans[i]+'0');
}
}
if(cnt==0)return "0";
return new String(chars,0,cnt);
}
}
本文详细解析了LeetCode第43题字符串乘法的多种解法,包括模拟竖式乘法、分解乘法为加法模拟、多项式计算及快速傅里叶变换加速卷积计算等。通过实例代码展示了解决方案的具体实现。

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



