LeetCode_Java_字符串相加(题目+思路+代码)

415.字符串相加

给定两个字符串形式的非负整数 num1num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 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();

    }
}

 

  • 24
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值