【问题描述】[简单]
【解答思路】
1. 双指针
- 从两个字符串最后开始处理 对齐字符串
- 添加当前位 int c = a+b+cnt; cnt为进位
- 超过长度的补“0” 要注意最后有可能需要处理溢出位
时间复杂度:O(max(M,N)) 空间复杂度:O(1)
public String addStrings(String num1, String num2) {int n1 = num1.length()-1;int n2 = num2.length()-1;int cnt = 0;StringBuilder res = new StringBuilder("");while(n1>=0 || n2>=0){int a = 0 ,b = 0;if(n1<0){a= 0 ;}else{a = num1.charAt(n1)-'0';}if(n2<0){b= 0 ;}else{b = num2.charAt(n2)-'0';}int c = a+b+cnt;cnt = c/10;c%=10;res.append(c);n1--;n2--;}if(cnt ==1){res.append(1);}return res.reverse().toString();}
** 优化**
class Solution {public String addStrings(String num1, String num2) {StringBuilder res = new StringBuilder("");int i = num1.length() - 1, j = num2.length() - 1, carry = 0;while(i >= 0 || j >= 0){int n1 = i >= 0 ? num1.charAt(i) - '0' : 0;int n2 = j >= 0 ? num2.charAt(j) - '0' : 0;int tmp = n1 + n2 + carry;carry = tmp / 10;res.append(tmp % 10);i--; j--;}if(carry == 1) res.append(1);return res.reverse().toString();}
}
【总结】
1. 双指针 不用函数的要注意处理溢出位 补“0”
2.一开始用了List 转字符串不好转 应该采用StringBulider
3.StringBulider用法总结
1、append(String str)/append(Char c):字符串连接
2、toString():返回一个与构建起或缓冲器内容相同的字符串
3、setCharAt(int i, char c):将第 i 个代码单元设置为 c(可以理解为替换)
4、insert(int offset, String str)/insert(int offset, Char c):在指定位置之前插入字符(串)
5、delete(int startIndex,int endIndex):删除起始位置(含)到结尾位置(不含)之间的字符串
转载链接:https://leetcode-cn.com/problems/add-strings/solution/add-strings-shuang-zhi-zhen-fa-by-jyd/