leetcode415

leetCode 415 Add Strings
本来这道题很简单,但是由于个人菜鸟提交了好几次才有通过~

public class Solution {
    public String addStrings(String num1, String num2) {
     int len1 = num1.length();
        int len2 = num2.length();

         if (len1 == 0||num1.equals("0")) return num2;
        if (len2 == 0||num2.equals("0")) return num1;
        StringBuilder res=new StringBuilder();
        StringBuilder residualString=new StringBuilder();
        int i = 0, j = 0,carry = 0;//进位。
        for (i = len1 - 1, j = len2 - 1; i >=0 && j >=0; i--, j--) {

            int a = num1.charAt(i) - '0';
            int b = num2.charAt(j) - '0';
            if (a + b +carry> 9) {

                residualString.append((a + b+ carry) % 10 );
                carry = 1;
            } else {
                residualString.append(a + b + carry);
                carry=0;
            }
        }
        if (i <0) {//len1小
            residualString.append(postDeal(num2.substring(0,j+1), carry));
        }
        else{
            residualString.append(postDeal(num1.substring(0,i+1), carry));
        }
        for(i=residualString.length()-1;i>=0;i--){
            res.append(residualString.charAt(i));
        }
        return res.toString();
    }
     String postDeal(String num,int carry){
       String res="";
        if(carry==0){
            for(int i=num.length()-1;i>=0;i--){
                res+=num.charAt(i);
            }
            return res;
        }

        else{
            for(int i=num.length()-1;i>=0;i--){
                int a=num.charAt(i)-'0';
                if(a+carry<=9){
                    res+=(a+carry);
                    // res+=num.substring(0,i);
                    carry=0;
                    // break;
                }
                else{
                    carry=1;
                    res+='0';
                }
            }
            if(carry==1)
             res+="1";
            return res;
        }
    }
}

代码写的并不简洁,甚至说是臃肿,贴在这里给自己个警钟,
1、最后的进位,
2、本来是想先把长的字符串的高位部分取出来,传到另一个参数做后 处理,结果没有考虑到两个字符串相同的情况;
3、在后处理时,想着简介一些,进位carry=0即可不用继续计算,然后没有翻转直接追加到了结果串上面去,最后翻转结果出错。
4、StringBuffer 有一个reverse()函数,直接翻转,不必自己写。
最后附上简洁的代码做个比较:(瞬间感觉世界都清净了)

public String addStrings(String num1, String num2) {
        int carry=0;
        StringBuffer sb=new StringBuffer();
        for(int i=num1.length()-1,j=num2.length()-1;i>=0||j>=0||carry==1;i--,j--){
            int a=0,b=0;
            if(i>=0) a=num1.charAt(i)-'0';
            if(j>=0) b=num2.charAt(j)-'0';
            sb.append((a+b+carry)%10);
            carry=(carry+a+b)/10;
        }
        return sb.reverse().toString();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值