LeetCode43-20.8.13-字符串相乘

本文详细解析了LeetCode第43题字符串乘法的多种解法,包括模拟竖式乘法、分解乘法为加法模拟、多项式计算及快速傅里叶变换加速卷积计算等。通过实例代码展示了解决方案的具体实现。

题目链接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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值