leetcode刷题(88)——415. 字符串相加

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

提示:

num1 和num2 的长度都小于 5100
num1 和num2 都只包含数字 0-9
num1 和num2 都不包含任何前导零
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式

我的思路:
1.2个字符串如果长度不一样,则对于短的字符串,前面进行0补位
2.从后面开始相加,因为要处理大于10进位问题,我之前按正序进行相加,就会出现进位出错问题
3.进位还有个问题,就是for循环结束了,第一位可能相加会大于10,这时候需要进位的,所以,需要还要把这个进行添加

class Solution {
    public String addStrings(String num1, String num2) {
           StringBuilder builder = new StringBuilder();
        int length1 = num1.length();
        int length2 = num2.length();
        if(length1>=length2){
            num2 = append0(length1-length2,num2);
        } else{
            num1 = append0(length2-length1,num1);
        }
        int sum = 0;
        for(int i=num1.length()-1;i>=0;i--){
            int a1 = num1.charAt(i) - '0';
            int a2 = num2.charAt(i) - '0';
            int total = a1+a2+sum;
            if(total>=10){
                total = total%10;
                sum = 1;
            }else{
                sum = 0;
            }
            builder.append(total+"");
        }
        if(sum!=0){
            builder.append(sum+"");
        }
        return builder.reverse().toString();
    }

    private String append0(int n,String str){
        StringBuilder builder = new StringBuilder();
        for(int i=0;i<n;i++){
            builder.append("0");
        }
        builder.append(str);
        return builder.toString();
    }
}

leetcode刷题(88)——415. 字符串相加_第1张图片
很明显,自己的写法,执行速度太慢,需要更高效的方式

于是回想其实补0的操作可以不用单独处理,于是有了如下代码,carry = sum/10还是处理比较精妙的

class Solution {
    public String addStrings(String num1, String num2) {
        StringBuilder builder = new StringBuilder();
        int length1 = num1.length()-1;
        int length2 = num2.length()-1;
        int carry = 0;
        while(length1>=0||length2>=0){
            int a1 = length1>=0?num1.charAt(length1)-'0':0;
            int a2 = length2>=0?num2.charAt(length2)-'0':0;
            int sum = a1 + a2 + carry;
            builder.append(sum%10);
            carry = sum/10;
            length1--;
            length2--;
        }
        if(carry!=0){
            builder.append(1);
        }
        return builder.reverse().toString();
    }   
}

leetcode刷题(88)——415. 字符串相加_第2张图片

你可能感兴趣的:(leetcode)