字符串相乘
给定两个以字符串形式表示的非负整数 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)或直接将输入转换为整数来处理。
思路:
按照平时计算两数相乘的方式来计算,定义一个长度为num1.length()+num2.length()的int型数组num来存放结果。
第一步:
i指针遍历num1字符串,j指针遍历num2字符串,从最低位开始计算,i初始为num1.length()-1,j初始为num2.length()-1;将num1的第i位字符,num2的第j位字符转换为数字,两数相乘的结果记为sum,将sum%10累加到num[i+j+1]中,进位sum/10累加到num[i+j]中,由于类加后num[i+j+1]可能大于9,所以需要更新num[i+j+1],先将进位num[i+j+1]%10累加到num[i+j]中,再将num[i+j+1]更新为num[i+j+1]%10。
第二步:
遍历数组num,去除前导0,将结果拼接起来并返回。
一开始脑子抽了,以为num1[0]得到的是最低位数字,但其实是最高位数字……写了半天百思不得其解。并且认为答案数组的长度应该是num1.length*num2.length 但其实是num1.length+num2.length。智商真的不太够啊!
稍稍吐槽一下js,动态类型转换做算法题的时候真的是会出现许多错误啊,不知道这样会不会影响以后的实际运用。这种bug找起来真的不容易
代码如下:
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var multiply = function(num1, num2) {
if