标签 |
---|
模拟 |
题目
https://leetcode-cn.com/problems/add-strings/
分析
定义两个指针i,j,分别指向两个字符串的末尾。用变量add表示进位,每次每次将i,j位置的数和add相加。加完以后更新add,同时将本位的值加入结果StringBuffer。
字符串长度不一样,可以用前置0将短的字符串补齐,实际操作是指针<0时,就返回数值0。
最后将StringBuffer反转,才是最终答案。
代码
class Solution {
public String addStrings(String num1, String num2) {
/*
这哪里简单了啊
*/
int i=num1.length()-1;
int j=num2.length()-1;
int add=0;
StringBuffer res=new StringBuffer();
while(i>=0||j>=0||add>0){
int a=i>=0?num1.charAt(i)-'0':0;
int b=j>=0?num2.charAt(j)-'0':0;
int c=a+b+add;
add=c/10;
res.append(c%10);
i--;
j--;
}
return res.reverse().toString();
}
}
复杂度
时间复杂度:O(max(len1,len2)) 竖式加法的次数取决于较大数的位数。
空间复杂度:O(1)。除答案外我们只需要常数空间存放若干变量。在 Java 解法中使用到了 StringBuffer,故 Java 解法的空间复杂度为O(n)。