LeetCode 415. 字符串相加

题目链接

415. 字符串相加

题目分析

这个题是个简单题,但是代码的写法可以有很多种。最基本的就是双指针同步去进行各位相加,然后用新的循环把多出来的那个数的剩余部分计算完。
这样写的话代码会比较复杂,我们可以把这里合成一个循环,直到所有条件都不符合了才结束,这里所说的条件是以下三个

  • 字符串1长度结束
  • 字符串2长度结束
  • 进位为0

这样写的话代码会精简非常非常多。

代码实现

实现一

class Solution {
    public String addStrings(String num1, String num2) {
        int sum = 0;
        char[] str1 = num1.toCharArray();
        char[] str2 = num2.toCharArray();
        int i = str1.length - 1;
        int j = str2.length - 1;
        int count = 0;
        StringBuffer sb = new StringBuffer();
        while(i >= 0 && j >= 0){
            sb.append((((str1[i] - '0' + str2[j] - '0')) + count) % 10);
            if((str1[i] - '0' + str2[j] - '0' + count) >= 10){
                count = 1;
            }else{
                count = 0;
            }
            i--;
            j--;
        }
        while(i >= 0){
            sb.append((str1[i] - '0' + count) % 10);
            if(str1[i] - '0' + count >= 10){
                count = 1;
            }else{
                count = 0;
            }
            i--;
        }
        while(j >= 0){
            sb.append((str2[j] - '0' + count) % 10);
            if(str2[j] - '0' + count >= 10){
                count = 1;
            }else{
                count = 0;
            }
            j--;
        }
        if(count == 1){
            sb.append('1');
        }
        return sb.reverse().toString();
    }
}

实现二

class Solution {
    public String addStrings(String num1, String num2) {
        StringBuilder sb = new StringBuilder();
        int carry = 0, i = num1.length()-1, j = num2.length()-1;
        while(i >= 0 || j >= 0 || carry != 0){
            if(i>=0) carry += num1.charAt(i--)-'0';
            if(j>=0) carry += num2.charAt(j--)-'0';
            sb.append(carry%10);
            carry /= 10;
        }
        return sb.reverse().toString();
    }
}
posted @ 2020-08-03 09:20  ZJPang  阅读(108)  评论(0编辑  收藏  举报