LeetCode——415. 字符串相加

题目描述:

在这里插入图片描述

解题思路:

这道题是easy水平的,考查模拟两数相加,一开始自己写的很长,还测试了好久才通过,还是逻辑没有处理好。
我一开始的思路是两个字符串先让字符串少的补齐和多的一样的0,然后在相加最后反转就行了,但这样麻烦。
可以直接在相加的时候,就处理,如果两个指针不符合条件,就把相加的数,赋值0。
这道题写完后,要多注意测试一下,比如//9 1;99 9; 1234 78;看是不是没有问题了在提交。

参考代码:

 //菜鸡写法
    public String addStrings(String num1, String num2) {
        //补全字符串//1234 78->1234 0078
        String lo="";
        int c=Math.abs(num1.length()-num2.length());
        for (int k = 0; k < c; k++) {
            lo+="0";
        }
        char[] n1=null;
        char[] n2=null;
        if(num1.length()>=num2.length())
        {
            num2=lo+num2;
            n1=num1.toCharArray();
            n2=num2.toCharArray();
        }
        else
        {
           num1=lo+num1;
            n1=num2.toCharArray();
            n2=num1.toCharArray();
        }
        int sum=0;
        int i=n1.length-1;
        int j=n1.length-1;
        int temp=0;
        String s="";
        for (int k = n1.length-1; k >= 0; k--)
        {
            int x=(n1[i]+n2[j]+temp-'0'-'0')%10;

            if(n1[i]+n2[j]-'0'-'0'+temp>9)
            {
                temp=1;
            }else
            {
                temp=0;

            }
            s+=String.valueOf(x);
            i--;
            j--;

        }
        //9 1 这种情况,如果temp不等于0,还需要加上temp,否则正确答案为10,可能会输出0
        if(temp!=0)
        {
            s+=temp;
        }
        StringBuffer sb=new StringBuffer(s);

        return sb.reverse().toString();


    }



    //大佬思路
    public String addStrings2(String num1, String num2) {
        StringBuilder builder=new StringBuilder();
        int i=num1.length()-1,j=num2.length()-1;
        int add=0;
        while(i>=0||j>=0||add!=0){
            //超出范围用0代替
            int x=i>=0 ? num1.charAt(i)-'0': 0;
            int y=j>=0 ? num2.charAt(j)-'0': 0;
            int result=(x+y+add);
            add=result/10;//进位
            builder.append(result%10);
            i--;
            j--;
        }
        return builder.reverse().toString();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值