0
点赞
收藏
分享

微信扫一扫

再战leetcode (字符串相乘)

千行 2022-01-27 阅读 23

43. 字符串相乘

题目描述

在这里插入图片描述

解题思路

在这里插入图片描述
在这里插入图片描述

代码

class Solution {
    public String multiply(String num1, String num2) {

        // 获取两个String数组长度
        int n = num1.length(), m = num2.length();
        // 开辟空间来存放开辟的int数组
        int[] A = new int[n], B = new int[m];
        // 将两个数字倒着存放进int数组
        // 比如String num1 = "123" A = [3,2,1]
        for (int i = n - 1; i >= 0; i--) {
            A[n - 1 - i] = num1.charAt(i) - '0';
        } //反向存贮
        for (int i = m - 1; i >= 0; i--) {
            B[m - 1 - i] = num2.charAt(i) - '0';
        }

        // C是存放乘积结果的数组
        // 两个数字相乘比如 99 * 99 最多也就4位 因为100*100 = 10000(也就是5位)
        int[] C = new int[n + m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                // String num1 = "123"  String num2 = "25"
                // A = [3,2,1] B = [5,2]
                //
                C[i + j] += A[i] * B[j];
            }
        }
        //存贮进位
        int t = 0;
        for (int i = 0; i < C.length; i++) {
            t += C[i];
            C[i] = t % 10;
            t /= 10;
        }
        int k = C.length - 1;
        while (k > 0 && C[k] == 0) {
            k--;
        }   //去除前导0
        StringBuilder sb = new StringBuilder();
        while (k >= 0) {
            sb.append((char) (C[k--] + '0'));
        } //反转
        return sb.toString();
    }
}

参考

leetcode

举报

相关推荐

0 条评论