43. Multiply Strings (JAVA)

Given two non-negative integers num1 and num2represented as strings, return the product of num1 and num2, also represented as a string.

Example 1:

Input: num1 = "2", num2 = "3"
Output: "6"

Example 2:

Input: num1 = "123", num2 = "456"
Output: "56088"

Note:

  1. The length of both num1 and num2 is < 110.
  2. Both num1 and num2 contain only digits 0-9.
  3. Both num1 and num2 do not contain any leading zero, except the number 0 itself.
  4. You must not use any built-in BigInteger library or convert the inputs to integer directly.

需要考虑乘积的长度,以及乘积的每一位对应的是乘数中哪两个数字的乘积。

注意字符串首位出现0的情况,通常情况下至多首位为0,除了一个特殊情况乘数中有0,这样会造成String中多位为0,所以在开头要排除这个可能。

注意JAVA比较字符串相等必须用equals而不能用==;字符转换成int,除了-'0',还需要强制转换(char);char转成String,也要显示转换,使用String.valueOf

class Solution {
    public String multiply(String num1, String num2) {
        if(num1.equals("0")|| num2.equals("0")) return "0";
        
        int[] product = new int[num1.length()+num2.length()]; //array to save the product
        int m1;
        int m2;
        int p;
        
        for(int i = product.length-1; i >= 0; i--){ //iterate each bit of the product
            for(int j = num2.length()-1; j>=0; j--){ //iterate each bit of multiplier2
                if(i-j-1 < 0) continue;
                if(i-j-1 >= num1.length()) break;
                m2 = num2.charAt(j)-'0';
                m1 = num1.charAt(i-j-1)-'0';
                p = m1*m2;
                product[i] += p;
            }
        }
        
        //calculate carry
        for(int i = product.length-1; i > 0; i--){
            if(product[i]<10) continue;
            
            product[i-1] += (product[i]/10);
            product[i] %= 10;
        }
        
        //transfrom integer to string
        String result;
        if(product[0] != 0) {
            result = String.valueOf((char) (product[0] + '0'));
        }
        else result = "";
        for(int i = 1; i < product.length; i++){
            result += String.valueOf((char) (product[i] + '0'));
        }
        
        return result;
    }
}

猜你喜欢

转载自www.cnblogs.com/qionglouyuyu/p/10818796.html
今日推荐