【刷题记录】43. 字符串相乘

简介: 【刷题记录】43. 字符串相乘


一、题目描述


来源:力扣(LeetCode)


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


注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。


示例 1:


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

输出: "6"


示例 2:


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

输出: "56088"


提示:


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


二丶思路分析


模拟
这道题目不能直接将输入转化为整数,然后计算,那我们可以根据小时候学的数字相乘的竖式计算方法进行模拟。
例如123 * 545

网络异常,图片无法展示
|


从右往左遍历乘数,将乘数的每一位与被乘数相乘得到对应的结果,再将每次得到的结果累加


注意补0 并且 两个长度分别为 nm 的数相乘,长度不会超过 n + m


三、代码实现

```

class Solution {

   public String multiply(String n1, String n2) {

       int n = n1.length(), m = n2.length();

       int[] res = new int[n + m];

       for (int i = n - 1; i >= 0; i--) {

           for (int j = m - 1; j >= 0; j--) {

               int a = n1.charAt(i) - '0';

               int b = n2.charAt(j) - '0';

               int r = a * b;

               r += res[i + j + 1];

               res[i + j + 1] = r % 10;

               res[i + j] += r / 10;

           }

       }

       StringBuilder sb = new StringBuilder();

       for (int i = 0; i < n + m; i++) {

           if (sb.length() == 0 && res[i] == 0) continue;

           sb.append(res[i]);

       }

       return sb.length() == 0 ? "0" : sb.toString();

   }

}

```

复杂度分析


  • 时间复杂度:
    网络异常,图片无法展示
    |
    ,其中 mn分别是num1num2的长度
  • 空间复杂度:O*(m+n)


运行结果


网络异常,图片无法展示
|


总结


这个题目其实带我们重温了一下我们小时候学乘法时候学习的乘法计算过程。只要理解了这个计算的过程。这道题目就比较简单了。

目录
相关文章
|
API
代码随想录 Day5 哈希表1 T242 相同字母的异序词 T349两个数组的交集 T202 快乐数 T1 两数之和(下)
代码随想录 Day5 哈希表1 T242 相同字母的异序词 T349两个数组的交集 T202 快乐数 T1 两数之和(下)
38 0
|
3月前
【刷题记录】自除数、除自身以外数组的乘积
【刷题记录】自除数、除自身以外数组的乘积
|
Serverless 索引
代码随想录 Day5 哈希表1 T242 相同字母的异序词 T349两个数组的交集 T202 快乐数 T1 两数之和(上)
代码随想录 Day5 哈希表1 T242 相同字母的异序词 T349两个数组的交集 T202 快乐数 T1 两数之和
72 0
|
存储 算法 Java
leetcode刷题记录:7.整数反转,8.字符串转整数,9.回文数
leetcode刷题记录:7.整数反转,8.字符串转整数,9.回文数
59 0
力扣刷题记录——459.重复的字符串、461. 汉明距离、476. 数字的补数
力扣刷题记录——459.重复的字符串、461. 汉明距离、476. 数字的补数
150 0
力扣刷题记录——459.重复的字符串、461. 汉明距离、476. 数字的补数
力扣刷题记录——258. 各位相加、263.丑数、268.丢失的数字
力扣刷题记录——258. 各位相加、263.丑数、268.丢失的数字
107 0
力扣刷题记录——258. 各位相加、263.丑数、268.丢失的数字
|
索引
力扣刷题记录——697. 数组的度、728. 自除数 、821. 字符的最短距离
力扣刷题记录——697. 数组的度、728. 自除数 、821. 字符的最短距离
力扣刷题记录——697. 数组的度、728. 自除数 、821. 字符的最短距离
|
编译器 API C语言
力扣面试题17.04 - 消失的数字【求和相减 + 异或位运算 + 哈希表】
三种方法巧解力扣面试题17.04 - 消失的数字,你值得拥有
148 0
力扣面试题17.04 - 消失的数字【求和相减 + 异或位运算 + 哈希表】
|
算法
每日算法刷题Day9-字符串移位包含问题、字符串乘方
⭐每日算法题解系列文章旨在精选重点与易错的算法题,总结常见的算法思路与可能出现的错误,与笔者另一系列文章有所区别,并不是以知识点的形式提升算法能力,而是以实战习题的形式理解算法,使用算法。
254 0
每日算法刷题Day9-字符串移位包含问题、字符串乘方