43. Multiply Strings
Given two numbers represented as strings, return multiplication of the numbers as a string.
Note:
The numbers can be arbitrarily large and are non-negative.
Converting the input string to integer is NOT allowed.
You should NOT use internal library such as BigInteger.
题意:
给定两个数值用string类型表示,返回这个两个数字的乘积,返回值也用string类型表示。
注意:
这些数字可以是任意大的,但不是负数。
不允许将输入字符串转换为整数。
你不应该使用内部类型如BigInteger。
思路:
按照乘法的基本运算规律,把每一位的乘积累加和计算出来以后,再对每一位考虑进位问题。这道题的要求是计算大数乘法。其中大数是以字符串的形式表示,任意大,非负,返回结果以字符串形式。
假设两个整数的长度分别为了l1和l2,则其最后结果长度为l1+l2(最后有进位)或者l1+l2-1(最后没有有进位)。因此,可以先用长度为l1+l2的数组记录结果,最后再转成字符串。
进行乘法的时候,先把各个位的相乘结果对应累加起来,即第1个整数的第i位(低位到高位)和第2个整数的第j位(低位到高位)相乘的结果应该存放在数组的i+j位。然后再统一处理进位。然后再统一处理进位。最后再将数组转成字符串前,需要跳过前面的零。如果结果只有0,则只返回0。
时间复杂度:O(l1l2)(l1和l2分别为两个整数长度)
空间复杂度:O(l1+l2)
1 | class Solution { |
Java Code:
1 | class Solution { |