【LeetCode刷题】--43.字符串相乘

43.字符串相乘

【LeetCode刷题】--43.字符串相乘_第1张图片

方法一:做加法,模拟竖式乘法的方法计算乘积

【LeetCode刷题】--43.字符串相乘_第2张图片

class Solution {
    public String multiply(String num1, String num2) {
        if(num1.equals("0") || num2.equals("0")){
            return "0";
        }
        String res = "0";
        //num2逐位与num1相乘
        for(int i = num2.length() - 1;i >= 0;i--){
            int carry = 0;
            //保存num2第i位数字与num1相乘的结果
            StringBuilder tmp = new StringBuilder();
            //补0
            for(int j =0;j<num2.length() - 1- i;j++){
                tmp.append(0);
            }
            int n2 = num2.charAt(i) - '0';
            //num2的第i位数字n2与num1相乘
            for(int j = num1.length() - 1;j>=0 || carry!=0 ; j--){
                int n1 = j < 0 ? 0 : num1.charAt(j) -'0';
                int product = (n1 * n2 + carry) % 10;
                tmp.append(product);
                carry = (n1 * n2 + carry) /10;
            }
            res = addStrings(res,tmp.reverse().toString());
        }
        return res;

    }
    //对两个字符串数字进行相加,返回字符串形式的和
    public String addStrings(String num1,String num2){
        StringBuilder builder = new StringBuilder();
        int carry = 0;  //进位
        for(int i = num1.length() - 1, j = num2.length() -1; i>=0||j>=0 || carry!=0;i--,j--){
            int x = i < 0 ? 0:num1.charAt(i) - '0';
            int y = j < 0 ? 0:num2.charAt(j) - '0';
            int sum = (x + y + carry) % 10;
            builder.append(sum);
            carry = (x + y + carry) / 10;
        }
        return builder.reverse().toString();
    }
}

方法二:做乘法

【LeetCode刷题】--43.字符串相乘_第3张图片

class Solution {
    public String multiply(String num1, String num2) {
        if(num1.equals("0") || num2.equals("0")){
            return "0";
        }
        int len1 = num1.length(),len2 = num2.length();
        int[] ans = new int[len1 + len2];
        for(int i = len1 - 1 ;i>=0;i--){
            int value1 = num1.charAt(i) - '0';
            for(int j = len2 - 1;j>=0;j--){
                int value2 = num2.charAt(j) - '0';
                int sum = ans[i+j+1]+ value1*value2;
                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();

    }
}

你可能感兴趣的:(LeetCode,leetcode,算法)