LeetCode 力扣 43. 字符串相乘 multiply-strings

大家觉得写还可以,可以点赞、收藏、关注一下吧!
也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn


文章目录

  • 43. 字符串相乘
    • 题目描述
    • 样例
      • 示例 1:
      • 示例 2:
    • 说明:
    • 分析
    • 参考代码
    • 提交结果

43. 字符串相乘

题目描述

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

样例

示例 1:

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

示例 2:

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

说明:

  1. num1 和 num2 的长度小于110。
  2. num1 和 num2 只包含数字 0-9。
  3. num1 和 num2 均不以零开头,除非是数字 0 本身。
  4. 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。

分析

  1. 把两个数用数组 a, b 来存储,并且反转(从个位开始乘)
  2. 对于 a 的第 i 位 和 b 的第 j 位相乘的结果存储在 c[i + j] 上,即 c[i + j] += a[i] * b[j];
    这里用加号是因为有多种情况都会映射到 i + j 位上。
  3. 最后,从 c 的低位向高位整理,c[i + 1] = c[i] / 10, c[i] %= 10;

参考代码

  • 这个代码是按照比较常规的高精度乘法模板求解,考虑了新手更能理解的高精度乘法代码模板,如果想要更高的时间效率,可以从下标考虑进行优化
  • 时间复杂度:这次没有再每次计算一遍大整数加法,在计算num1每一位和num2每一位的乘积的时候,时间复杂度为 O ( m n ) O(mn) O(mn)
  • 空间复杂度:所开辟的数组存储乘积大小 O ( m + n ) O(m+n) O(m+n)
/*
 * @Author: motongxue
 * @Date: 2020-08-13 19:53:33
 * @LastEditors: motongxue
 * @LastEditTime: 2020-08-13 20:16:56
 * @Blog: https://motongxue.cn
 * @Description: file content
 */
public class multiply43 {
    public String multiply(String num1, String num2) {
        if (num1.equals("0") || num2.equals("0"))
            return "0";
        int len1 = num1.length();
        int len2 = num2.length();
        int[] n1 = new int[len1 + 1];
        int[] n2 = new int[len2 + 1];
        int[] ans = new int[len1 + len2 + 10];
        for (int i = 0; i < len1; i++)
            n1[len1 - i] = num1.charAt(i) - '0';
        for (int i = 0; i < len2; i++)
            n2[len2 - i] = num2.charAt(i) - '0';
        for(int i=1;i<=len1;i++){		//相当于学习小学的乘法,一位数一位数相乘,然后相加起来
            for(int j=1;j<=len2;j++){
                ans[i+j-1] += n1[i]*n2[j];
                ans[i+j] += ans[i+j-1]/10;
                ans[i+j-1] %= 10;
            }
        }
        int sum = ans[len1+len2]==0?len1+len2-1:len1+len2;
        StringBuffer res = new StringBuffer();
        for(int i=sum;i>0;i--)
            res.append(ans[i]);
        return res.toString();
    }
}

提交结果

LeetCode 力扣 43. 字符串相乘 multiply-strings_第1张图片


2020年8月13日更

大家觉得写还可以,可以点赞、收藏、关注一下吧!
也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn


你可能感兴趣的:(#,算法其他,字符串,算法,leetcode,数据结构,高精度)