做网站需要用什么软件,张槎建网站服务,如何做好电子商务网站开发,商标注册查询流程⭐️ 题目描述 #x1f31f; leetcode链接#xff1a;https://leetcode.cn/problems/add-strings/description/
ps#xff1a; 从两个字符串的末尾开始遍历#xff0c;依次相加#xff0c;若大于等于 10 则使用一个变量记录进位#xff0c;遍历的时候若两个字符串其中一…⭐️ 题目描述 leetcode链接https://leetcode.cn/problems/add-strings/description/
ps 从两个字符串的末尾开始遍历依次相加若大于等于 10 则使用一个变量记录进位遍历的时候若两个字符串其中一个结束那么结束的字符串的当前位就用 0 来与另一个字符串相加。这里可以使用头插但是头插需要挪动数据效率比较低时间复杂度是 O ( N 2 ) O(N^2) O(N2)所以可以使用尾插最后逆置即可这种思路的时间复杂度为 O ( N ) O(N) O(N)。 还有一种特殊的情况是5 5 10 两个字符串只有一个数而且两个字符串的 val 相加后是同时都为结束但是进位还有一个 1 所以还要判断这种特殊情况。
代码
class Solution {
public:string addStrings(string num1, string num2) {// 从两个字符串的末尾 依次相加 进位int end1 num1.size() - 1;int end2 num2.size() - 1;string ans;// 记录进位int unit 0;while (end1 0 || end2 0) {// 若当前任意一个字符串结束 那么默认为0int val1 end1 0 ? num1[end1] - 0 : 0;int val2 end2 0 ? num2[end2] - 0 : 0;// 尾插ans (val1 val2 unit) % 10 0;// 大于10进位unit val1 val2 unit 10 ? 1 : 0;end1--;end2--;}// 特殊情况进位还存在if (unit) {ans 1;}// 逆置 传迭代区间 左闭右开reverse(ans.begin() , ans.end());return ans;}
};