[LeetCode] 43. Multiply Strings

题意很简单,给两个string做乘法。无需考虑一些比如string中夹杂字母的case,但是不允许将input convert成数字再做乘法。影子题415。需要注意的几个地方是

思路就是正常的竖式做乘法,比如下面这个例子,就是123先乘以5,再用123和4相乘。

数字是从低位到高位做乘法的,结果集的数组是从右往左记录每一位的数字的

结果集的长度一定不大于(数字1的长度 + 数字2的长度)

竖式运算思想,以 num1 为 123,num2 为 456 为例分析

[LeetCode] 43. Multiply Strings_第1张图片

 

 

遍历 num2 每一位与 num1 进行相乘,将每一步的结果进行累加。

int sum = product + res[p2]; 这一行为什么还要加入res[p2]是因为要应对这种情况,5 x 3得到15以后,还需要加上之前这个位置上的3,这一位上的数字才能正确。

[LeetCode] 43. Multiply Strings_第2张图片

 

 

作者:breezean
链接:https://leetcode-cn.com/problems/multiply-strings/solution/you-hua-ban-shu-shi-da-bai-994-by-breezean/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

JavaScript实现

 1 /**
 2  * @param {string} num1
 3  * @param {string} num2
 4  * @return {string}
 5  */
 6 var multiply = function(num1, num2) {
 7     let m = num1.length;
 8     let n = num2.length;
 9     let pos = new Array(m + n).fill(0);
10 
11     for (let i = m - 1; i >= 0; i--) {
12         for (let j = n - 1; j >= 0; j--) {
13             let mul = (num1.charAt(i) - '0') * (num2.charAt(j) - '0');
14             let p1 = i + j;
15             let p2 = i + j + 1;
16             let sum = mul + pos[p2];
17             pos[p1] += Math.floor(sum / 10);
18             pos[p2] = sum % 10;
19         }
20     }
21     let res = '';
22     for (let p of pos) {
23         if (!(res.length === 0 && p === 0)) {
24             res += p;
25         }
26     }
27     return res.length === 0 ? '0' : res;
28 };

 

Java实现

 1 class Solution {
 2     public String multiply(String num1, String num2) {
 3         int m = num1.length();
 4         int n = num2.length();
 5         int[] res = new int[m + n];
 6         for (int i = m - 1; i >= 0; i--) {
 7             for (int j = n - 1; j >= 0; j--) {
 8                 int product = (num1.charAt(i) - '0') * (num2.charAt(j) - '0');
 9                 int p1 = i + j;
10                 int p2 = i + j + 1;
11                 int sum = product + res[p2];
12                 res[p1] += sum / 10;
13                 res[p2] = sum % 10;
14             }
15         }
16         StringBuilder sb = new StringBuilder();
17         for (int p : res) {
18             if (!(sb.length() == 0 && p == 0)) {
19                 sb.append(p);
20             }
21         }
22         return sb.length() == 0 ? "0" : sb.toString();
23     }
24 }

 

你可能感兴趣的:([LeetCode] 43. Multiply Strings)