415.字符串相加
给定两个字符串形式的非负整数 num1
和num2
,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger
), 也不能直接将输入的字符串转换为整数形式。
思路:
1.创建一个可变字符容器用来存储个位数/十位数/百位数等计算的结果
【注意:最后要将该字符变量反转输出】
2.将num1与nums数组的长度分别赋给i和j,并且一个count变量,用来存储进位
3.由于未知循环次数,但是已经终止循环条件,因此采用while循环
->当i或j大于等于0时,执行个位数/十位数/百位数等的相加操作
--> 当 i >= 0时,取出nums数组中下标为i的值并且转换为数组类型 (-‘0’)-》赋给n1
-->当 i < 0时,则直接赋值为0
--> 当 j >= 0时,取出nums数组中下标为i的值并且转换为数组类型 (-‘0’)-》赋给n2
-->当 j< 0时,则直接赋值为0
4.将n1+n2+carry相加的结果赋给sum
5.对sum进行处理,如果sum>10,则要进位 => carry = sum/10;
然后将sum%10的结果添加到字符容器中
6.因为是从末尾开始计算的,因此i--,j--继续执行
class Solution {public String addStrings(String num1, String num2) {
//创建一个可变字符容器用来存储个位数/十位数/百位数等计算的结果StringBuilder str = new StringBuilder();int i = num1.length()-1, j =num2.length()-1, count = 0;//由于未知循环次数,但是已经终止循环条件,因此采用while循环while(i >= 0 || j >= 0){int n1 = i >= 0 ? num1.charAt(i) - '0' : 0;int n2 = j >= 0 ? num2.charAt(j) - '0' : 0;int sum = n1 + n2 + count;count = sum / 10;str.append(sum % 10);i--;j--;}//当加到最高位时,若还有进位,但此时i-- 或者 j--已经为0,就无法再执行sum = n1 + n2 + count这条语句//因此还要有一个if语句,判断当前count是否等于1,若为真就要将结果添加到字符容器中if(count == 1){str.append(count);}return str.reverse().toString();}
}