LeetCode415. 字符串相加
题目描述
/**
*
* 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
*
*/
思路分析
- 按照多位数加法列竖式计算的方式
- 定义一个可变长字符串保存计算的结果,定义一个carry保存对应两位是否有进位
- 将每次计算的结果以字符从形式追加到字符串,然后保存进位
- 注意数字和字符之间的ASCII码差值,字符 - '0'才是对应的数字
- 考虑两个数字长度不等的情况,可以在小数字的最高位补0
- 详细分析如下
源码及分析
public String addStrings(String num1, String num2) {
//数据校验
if ("0".equals(num1) || num1 == null || num1.length() == 0) {
return num2;
}
if ("0".equals(num2) || num2 == null || num2.length() == 0) {
return num1;
}
//定义StringBuffer保存两字符串相加后的值
StringBuffer buffer = new StringBuffer();
//定义carry保存两数相加后是否有进位
int carry = 0;
//定义i j 指针指向两字符串的最右侧索引
int i = num1.length() - 1, j = num2.length() - 1;
//将两数从个数开始依次相加,考虑进位,如果两数长度不相等,则高位补0
while (i >= 0 || j >= 0 || carry != 0) {
//考虑两数长度不相同的情况,定义 x y保存对应位上的数字大小
int x = i >= 0 ? num1.charAt(i) - '0' : 0;
int y = j >= 0 ? num2.charAt(j) - '0' : 0;
int res = x + y + carry;
buffer.append(res % 10);
carry = res / 10;
i--;
j--;
}
return buffer.reverse().toString();
}