题目
给定两个以字符串形式表示的非负整数 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(); } }
|