Contents
  1. 1. 题目
  2. 2. 难点
  3. 3. 解题思路

题目

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

示例 1:

输入: num1 = “2”, num2 = “3”
输出: “6”
示例 2:

输入: num1 = “123”, num2 = “456”
输出: “56088”
说明:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/multiply-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

难点

不能直接转整数,那就需要去模拟乘法,
然后就是容易超出整数的范围
我只想到了一位数字乘以被乘数,但还是会超出位数限制,long也没有110位

解题思路

看到一个评论,一位一位计算,放入数组

错误1 要添加以前位,不光是最后一位
0 * 0 返回 “”,因为去0导致

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Solution {
public String multiply(String num1, String num2) {
int n1 = num1.length();
int n2 = num2.length();
if(n1 < 0 || n2 < 0)return "";
int[] result = new int[n1 + n2];
for(int i = n2 -1; i >= 0 ; i--){
for(int j = n1-1; j >=0 ; j--){
int one = num2.charAt(i) - '0';
int two = num1.charAt(j) - '0';
int sum = one * two + result[i+j+1];
result[i+j] += sum/10;
result[i+j+1] = sum%10;
}
}
StringBuilder sb = new StringBuilder();
boolean zero = true;
for(int k = 0 ; k < n1+n2 ; k++){
if(result[k]!=0){
zero = false;
}
if(!zero){
sb.append(String.valueOf(result[k]));
}

}


return sb.toString().equals("")?"0":sb.toString();
}
}
Contents
  1. 1. 题目
  2. 2. 难点
  3. 3. 解题思路