JAVA解法
class Solution {
public String addStrings(String num1, String num2) {
// 获取传进来的两个字符串的长度,且定义一个保存进位的 add 变量
int i = num1.length() - 1, j = num2.length() - 1, add = 0;
// 定义结果集
StringBuffer ans = new StringBuffer();
// 只要以上三个变量不为任一一个不为 0 都能进入循环
while (i >= 0 || j >= 0 || add != 0) {
// num1 长度不为 0 则继续取值
int x = i >= 0 ? num1.charAt(i) - '0' : 0;
// num2 长度不为 0 则继续取值
int y = j >= 0 ? num2.charAt(j) - '0' : 0;
// 两字符串相加再加上上一步的进位
int result = x + y + add;
// 对结果求余作为本次运算的结果
ans.append(result % 10);
// 对结果除以 10 获得进位的值
add = result / 10;
// 维护两个指针
i--;
j--;
}
// 最后要记得将答案反转一下
ans.reverse();
// 返回最终答案,记得 toString 变成 String 类型
return ans.toString();
}
}
题解分析
这道字符串相加的思路是将其每个字符转换成整型相加得出结果再转换成字符串。首先获取传进来的两个字符串的长度,且定义一个保存进位的 add 变量,定义结果集,只要以上三个变量不为任一一个不为 0 都能进入循环,只要 num1 或者 num2 的长度不为 0 则进行取值。这里的 num1.charAt(i) - '0'
主要是利用字符 ‘0’ 到 ‘9’ 的 ASCII 码值是连续的,让其作差即可得到字符的本身的整型值。
取完值,两字符串相加再加上上一步的进位,对结果求余作为本次运算的结果,再对结果除以 10 获得进位的值,同步维护两个指针,最后要记得将答案反转一下,因为拼接字符串是从左到右拼接的,但是我们的数是从又到左数值越大的,返回最终答案,记得 toString 变成 String 类型。
leetcode原题:415. 字符串相加
评论区