【Leetcode】43.字符串相乘
43. 字符串相乘
题目
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:
输入: num1 = "123", num2 = "456"
输出: "56088"
方法
对于这类题目,一定要想到大数溢出的情况。如果给定字符串num1和num2特别长,其自己也许都无法转换成int甚至long类型,更不用说让他们转换后再相乘了。所以这种办法行不通,必须要从对字符串的操作中寻找办法。
我们在小学时就学过字符串相乘,现在我们来回忆一下这个过程:例如对于123*45,我们会这样操作:让123先乘5,得到一个结果,再让123乘4得到另一个结果,两个结果相加即为乘法的结果。但如果123乘5这一步,如果数很大的话,还是可能溢出。因此我们的计算过程需要再简单一点,如下所示:
即:我们将num1和num2的每一个字符进行相乘,再错位进行相加得到结果。
这一用人类思维方式表示的计算过程,对于计算机来说需要这样组织:
定义两个指针i和j,分别指向num1和num2上的某一位置上的字符,计算这两个字符串的乘积,同时将乘积叠加到结果数组res上的正确位置(数组res用于在地下接收相加的结果)。
但res上哪个位置是与字符num1[i]和num2[j]的乘积有关的呢?仔细观察上述计算过程就可发现,num1[i]和num2[j]的乘积对应这数组中的i+j位置和i+j+1位置。
代码
1 |
|