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/
相關文章
相關標籤/搜索