欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

利特码 43. 字符串乘法

最编程 2024-04-06 09:21:21
...

题目链接https://leetcode.cn/problems/multiply-strings/description/

错误:

class Solution {
    public String multiply(String num1, String num2) {
        int n = num1.length();
        int m = num2.length();
        int a=0 , b=0;
        for(int i=0;i<n;i++){
            a = a*10 + num1.charAt(i) - '0';
        }
        for(int i=0;i<m;i++){
            b = b*10 + num2.charAt(i) - '0';
        }
        int r = a*b;
        String res = Integer.toString(r);
        return res;
    }
}

数太大时,超出int类型的范围了。

既然不可以直接转换成int相乘再转回string,那每一位数都依次计算吧。

正确:

public String multiply(String num1, String num2) {
        if("0".equals(num1) || "0".equals(num2)){
            return "0";
        }
        int n = num1.length();
        int m = num2.length();
        int[] ans=new int[n+m];
        for(int i=n-1;i>=0;i--){
            int a = num1.charAt(i)-'0';
            for(int j=m-1;j>=0;j--){
                int b = num2.charAt(j)-'0';
                int sum = ans[i+j+1] + a * b;
                ans[i+j+1] = sum%10;
                ans[i+j] += sum/10;
            }
        }
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<ans.length;i++){
            if(i==0 && ans[i]==0){
                continue;
            }
            sb.append(ans[i]);
        }
        return sb.toString();
    }