天天看點

LeetCode——415. 字元串相加

題目描述:

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();
    }