leetcode算法题

例1:
对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序造成的数组。例如,若是 X = 1231,那么其数组形式为 [1,2,3,1]。
给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。
示例 1:
输入:A = [1,2,0,0], K = 34
输出:[1,2,3,4]
解释:1200 + 34 = 1234

思路 
让咱们逐位将数字加在一块儿。举一个例子,若是要计算 123123 与 912912 的和。咱们顺次计算 3+23+二、2+12+一、1+91+9。任什么时候候,当加法的结果大于等于 1010,咱们要将进位的 11 加入下一位的计算中去,因此最终结果等于 10351035。 

算法 
咱们能够对以上的想法作一个小变化,让它实现起来更容易 —— 咱们将整个加数加入数组表示的数的最低位。 继续以前的例子 123+912123+912,咱们把它表示成 [1, 2, 3+912][1,2,3+912]。而后,咱们计算 3+912 = 9153+912=915。55 留在当前这一位,将 910/10=91910/10=91 以进位的形式加入下一位。 而后,咱们再重复这个过程,计算 [1, 2+91, 5][1,2+91,5]。咱们获得 9393,33 留在当前位,将 90/10=990/10=9 以进位的形式加入下一位。继而又获得 [1+9, 3, 5][1+9,3,5],重复这个过程以后,最终获得结果 [1, 0, 3, 5][1,0,3,5]。

public static List<Integer> addToArrayForm(int[] A, int K) {
    int cur = K;
    int i = A.length;
    List<Integer> result = new ArrayList<>();
    while (--i >= 0 || cur > 0) {
        if (i >= 0)
            cur += A[i];
        result.add(cur % 10);
        cur /= 10;
    }
    Collections.reverse(result);
    result.stream().forEach(integer -> System.out.println(integer));//测试shu'cu
    return result;
}

例2:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,而且它们的每一个节点只能存储 一位 数字。
若是,咱们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您能够假设除了数字 0 以外,这两个数都不会以 0 开头。

详解:https://leetcode-cn.com/problems/add-two-numbers/solution/liang-shu-xiang-jia-by-leetcode/
相关文章
相关标签/搜索