题目 字符串相乘
给定两个以字符串形式表示的非负整数 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
思路
最开始能想到的简单思路就是模拟乘法运算。例如123乘456,就可以模拟成:
123 * 6 + 123 * 50 + 123 * 400
这样模拟一个很重要的原因就是不准用大数类型,那么要自己写相乘和相加,时间复杂度为O(n·m),n和m为字符串的长度。
然后看了看官解有没有优化,思路和这个模拟思路是没有什么差别的,但是官解使用数组来存储运算结果,这样的话就不用写大数类型相加了,主要是可以降低代码复杂度。
代码实现
class Solution {
public:
string multiply(string num1, string num2) {
vector<char> sum(num1.size() + num2.size(