每日leetcode-字符串相加

 


public class NumPlus {
    public static String addStrings(String num1,
                             String num2) {
        char[] num1Ch = num1.toCharArray();
        char[] num2Ch = num2.toCharArray();
        //reverse
        char[] reverse1 = reverse(num1Ch);
        char[] reverse2 = reverse(num2Ch);
        int length1 = num1Ch.length;
        int length2 = num2Ch.length;
        int max  = length1 >= length2 ? length1 : length2;
        char[] res = new char[max];
        boolean flag = false;
        //是否进位
        int nextI = 0;
        for (int i = 0; i < max; i++) {
            if (i <=length1-1 && i<=length2-1) {
                // ascii表码减48即相加的值
                int i1 = reverse1[i] + reverse2[i] -48 +nextI;
                if (i1 > 57) {
                    nextI = 1;
                    i1 -= 10;
                    if (i == max-1) {
                        flag = true;
                    }
                } else {
                    nextI = 0;
                }
                res[i] = (char) i1;
            } else if(i>length1-1){
                //num2数据多
                int i2 = reverse2[i] + nextI;
                if (i2 > 57) {
                    nextI = 1;
                    i2 -= 10;
                    if (i == max-1) {
                        flag = true;
                    }
                } else {
                    nextI = 0;
                }
                res[i] = (char) i2;
            } else {
                //num2数据多
                int i1 = reverse1[i] + nextI;
                if (i1 > 57) {
                    nextI = 1;
                    i1 -= 10;
                    if (i == max-1) {
                        flag = true;
                    }
                } else {
                    nextI = 0;
                }
                res[i] = (char) i1;
            }
        }
        char[] reverse = reverse(res);
        String str = String.valueOf(reverse);

        System.out.println(str);
        return flag?"1"+str:str;
    }

    private static char[] reverse(char[] a){
        char[] b = a;
        for(int start=0,end=b.length-1;start<end;start++,end--) {
            char temp=b[start];
            b[start]=b[end];
            b[end]=temp;
        }
        return b;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值