43. Multiply Strings(medium)

Given two non-negative integers num1 and num2 represented 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:

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

分析:
给两个字符串整数,要求返回乘积。要求不能使用BigInteger库,也不能直接转化为整形。
参考 Easiest JAVA Solution with Graph Explanation
模仿手动计算乘法,每位数相乘之后,再把所有乘积加起来。通过下图可以发现,num1[i] * num2[j] 的结果将会落在 index [i + j, i + j + 1]。
这样我们从右往左,把每个数字相乘,结果加到pos[]数组中,令 mul = num1[i] * num2[j],p1=i+j,p2=i+j+1。观察图可以看出 mul+pos[p2]的值%10即为新的pos[p2]值 mul+pos[p2] / 10的值 + pos[p1]为新的pos[p1]的值。

43. Multiply Strings(medium)_第1张图片

Java语言:

class Solution {
    public String multiply(String num1, String num2) {
        int m = num1.length(), n = num2.length();
        int[] pos = new int[m + n];

        for (int i = m - 1; i >= 0; i--) {
            for (int j = n - 1; j >= 0; j--) {
                int mul = (num1.charAt(i) - '0') * (num2.charAt(j) - '0');
                int p1 = i + j, p2 = i + j + 1;
                int sum = mul + pos[p2];

                pos[p1] += sum / 10;
                pos[p2] = (sum) % 10;
            }
        }

        StringBuilder sb = new StringBuilder();
        for (int p : pos) {
            if (sb.length() != 0 || p != 0) {
                sb.append(p);
            }
        }
        return sb.length() == 0 ? "0" : sb.toString();
    }
}

你可能感兴趣的:(43. Multiply Strings(medium))