LeetCode415-字符串相机(水题)

两个很大的字符串相加。

 

主要的问题是,怎么把每一位相加,然后进位处理。

 

因为是加法,进位只会多一位。

 

所有上述问题,只要把字符串倒转过来,每位相加,再放到stringbuilder里就好了。

 

比如123456+67,这种长度不一样的。

 

就是

654321+

76

 

6+7 = 3,进1

5+6+1=2 进1

4+1=5

最后就是

325321

倒转就是123523

 

如果其中有一个数加完了,就把这个数剩下的全append进去.

有可能循环之后,最后一位才是进位,要把最后的进位加上!

 

public class LeetCode415 {

    public static void main(String[] args) {
        System.out.println(addStrings("1","9"));
    }

    public static String addStrings(String num1, String num2) {

        StringBuilder sb = new StringBuilder();

        int len1= num1.length()-1;
        int len2= num2.length()-1;

        //进位
        int count = 0;

        //倒着相加,从后面遍历
        while(0<=len1&&0<=len2){

            char temp1 = num1.charAt(len1);
            char temp2 = num2.charAt(len2);
            int temp = ((int)temp1-48)+((int)temp2-48)+count;
            //用完之后设为0
            count=0;
            if(temp>=10){
                count=1;
                temp%=10;
            }
            sb.append((char)(temp+48));

            len1--;
            len2--;

        }

        while (len1>=0){
            char temp1 = num1.charAt(len1);
            int temp = ((int)temp1-48)+count;
            //用完之后设为0
            count=0;
            if(temp>=10){
                count=1;
                temp%=10;
            }
            sb.append((char)(temp+48));
            len1--;
        }

        while (len2>=0){
            char temp2 = num2.charAt(len2);
            int temp = ((int)temp2-48)+count;
            //用完之后设为0
            count=0;
            if(temp>=10){
                count=1;
                temp%=10;
            }
            sb.append((char)(temp+48));
            len2--;
        }

        //有可能最后还有一个进位呢?
        if(count==1)
            sb.append('1');

        String result = sb.reverse().toString();

        return result;

    }

}

 

posted @ 2018-09-27 20:27  朋友圈  阅读(99)  评论(0编辑  收藏  举报