lintcode 655 · 大整数加法 【直接模拟加法,字符串存储】

题目

https://www.lintcode.com/problem/655/

以字符串的形式给出两个非负整数 num1 和 num2,返回 num1 和 num2 的和。



num1 和 num2 的长度都小于5100。
num1 和 num2 都只包含数字 0-9。
num1 和 num2 都不包含任何前导零。
您不能使用任何内置的BigInteger库内的方法或直接将输入转换为整数。
样例
样例 1:

输入 : num1 = "123", num2 = "45"
输出 : "168"

思路

直接模拟加法即可,我是直接把字符存入到队列里,按照加法规则,从右往左加,字符串存储。我用队列的原因是方便取数,不用判断边界,判断空不空就行了

代码

public class Solution {
    /**
     * @param num1: a non-negative integers
     * @param num2: a non-negative integers
     * @return: return sum of num1 and num2
     */
    public String addStrings(String num1, String num2) {
        char[] arr1 = num1.toCharArray();
        char[] arr2 = num2.toCharArray();

        LinkedList<Character> ll1 = new LinkedList<>();
        LinkedList<Character> ll2 = new LinkedList<>();

        //存入队列,方便取数,不用麻烦的边界判断
        for (char c : arr1) {
            ll1.add(c);
        }

        for (char c : arr2) {
            ll2.add(c);
        }


        StringBuilder sb =new StringBuilder();
        boolean isjinwei = false;
        while (!ll1.isEmpty() && !ll2.isEmpty()){
            int c1 = ll1.pollLast()-'0';
            int c2 = ll2.pollLast()-'0';

            int cur = c1+c2;
            if(isjinwei)
                cur+=1;

            if(cur<10){
                sb.append(cur);
                isjinwei = false;
            }
            else{
                sb.append(cur%10);
                isjinwei=true;
            }
        }

        while (!ll1.isEmpty()){
            int c = ll1.pollLast()-'0';
            if(isjinwei)
                c+=1;

            if(c<10){
                sb.append(c);
                isjinwei =false;
            }else{
                sb.append(c%10);
                isjinwei =true;
            }
        }

        while (!ll2.isEmpty()){
            int c = ll2.pollLast()-'0';
            if(isjinwei)
                c+=1;

            if(c<10){
                sb.append(c);
                isjinwei =false;
            }else{
                sb.append(c%10);
                isjinwei =true;
            }
        }

        if(isjinwei){
            sb.append("1");
        }

        sb=sb.reverse();
        return sb.toString();
    }
}

你可能感兴趣的:(算法)