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();
    }
}
posted @ 2022-05-17 21:33  Asimple  阅读(15)  评论(0编辑  收藏  举报