1. 程式人生 > 其它 >LeetCode No43. 字串相乘

LeetCode No43. 字串相乘

題目

定兩個以字串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字串形式。

注意:不能使用任何內建的 BigInteger 庫或直接將輸入轉換為整數。

示例 1:

輸入: num1 = "2", num2 = "3"
輸出: "6"

示例 2:

輸入: num1 = "123", num2 = "456"
輸出: "56088"

提示:

1 <= num1.length, num2.length <= 200
num1 和 num2 只能由數字組成。
num1 和 num2 都不包含任何前導零,除了數字0本身。

思路

手寫大數乘法,注意前導0。

AC程式碼

點選檢視程式碼
class Solution {
    public String multiply(String num1, String num2) {
        if (num1.equals("0") || num2.equals("0")) {
            return "0";
        }
        char[] char1 = num1.toCharArray();
        char[] char2 = num2.toCharArray();
        int len = char1.length + char2.length;

        int[] result = new int[len];

        for (int i = 0; i < char1.length; i++){
            for (int j = 0; j < char2.length; j++){
                result[i + j + 1] += (int)(char1[i]-'0') * (int)(char2[j]-'0');
            }
        }

        for(int k = result.length-1; k > 0; k--){
            result[k - 1] += result[k] / 10;
            result[k] %= 10;
        }
        int index = result[0] == 0 ? 1 : 0;
        StringBuffer ans = new StringBuffer();
        while (index < len) {
            ans.append(result[index]);
            index++;
        }
        return ans.toString();
    }
}