注:
①注意字符串相加时,while循环的判断条件。
②涉及到进位问题时,应该从字符串最后一位往前处理,不然会有遗漏进位的情况。
while(index1>=0||index2>=0||flag!=0){
···
···
···
}
题目:
给定两个以字符串形式表示的非负整数 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 为 123,num2 为 456 为例分析:
遍历 num2 每一位与 num1 进行相乘,将每一步的结果进行累加;num2 除了第一位的其他位与 num1 运算的结果需要 补0。
复杂度分析
时间复杂度:O(mn+n2),其中 m 和 n 分别是num1和 num2的长度。计算乘积的总次数是 mn。字符串相加操作共有 n 次,相加的字符串长度最长为m+n,因此字符串相加的时间复杂度是 O(mn+n2)。总时间复杂度是 O(mn+n2)。
空间复杂度:O(m+n),其中 m 和 n 分别是num1和 num2的长度。空间复杂度取决于存储中间状态的字符串,由于乘积的最大长度为 m+n,因此存储中间状态的字符串的长度不会超过 m+n。
class Solution {
public:
//两个string相加
string adder(string result,string temp){
int index1=result.size()-1;
int index2=temp.size()-1;
int flag=0;
string str="";
while(index1>=0||index2>=0||flag!=0){
int n1=index1>=0?result[index1]-'0':0;
int n2=index2>=0?temp[ind