LeetCode.989-數組形式的整數作加法(Add to Array-Form of Integer)

這是悅樂書的第371次更新,第399篇原創

java

01 看題和準備

今天介紹的是LeetCode算法題中Easy級別的第233題(順位題號是989)。對於非負整數XX的數組形式是從左到右順序的數字數組。例如,若是X = 1231,則數組形式爲[1,2,3,1]算法

給定非負整數X的數組形式A,返回整數X + K的數組形式。例如:數組

輸入:A = [1,2,0,0],K = 34
輸出:[1,2,3,4]
說明:1200 + 34 = 1234數據結構

輸入:A = [2,7,4],K = 181
輸出:[4,5,5]
說明:274 + 181 = 455code

輸入:A = [2,1,5],K = 806
輸出:[1,0,2,1]
說明:215 + 806 = 1021orm

輸入:A = [9,9,9,9,9,9,9,9,9,9],K = 1
輸出:[1,0,0,0,0,0,0,0,0,0,0]
說明:9999999999 + 1 = 10000000000io

注意class

  • 1 <= A.length <= 10000變量

  • 0 <= A [i] <= 9數據結構與算法

  • 0 <= K <= 10000

  • 若是A.length > 1,則A[0]!= 0。

02 第一種解法

題目的意思是要咱們把K(低位到高位)每一位數加到A(從後往前)中對應位上,最後輸出一個List

思路:先處理K,每次拿A的個位數,使用對10取餘獲得,再從A中取一位數出來(從後往前),兩數相加,須要判斷是否有進位產生,將和添加進List中,K再除以10,切換到新的個位數,直到K等於0。處理完K後,若是A中還有數沒處理完,須要再處理下,在前面處理K時遺留的進位依舊須要參與運算,直處處理完A中全部元素。最後,若是存進位的變量還有值,則須要將其添加進List中。由於處理數據是從後往前的順序,因此須要將List反轉,藉助Collectionsreverse方法完成。

public List<Integer> addToArrayForm(int[] A, int K) {
    List<Integer> result = new ArrayList<Integer>(); 
    int i = A.length-1, tem = 0;
    while (K > 0) {
        // i須要判斷一次,由於A的長度可能比K的位數小
        int current = K%10 + (i >=0 ? A[i--] : 0) + tem;
        // 大於10會產生進位
        if (current >= 10) {
            current -= 10;
            tem = 1;
        } else {
            tem = 0;
        }
        result.add(current);
        K /= 10;
    }
    // 若是K已經處理完了,可是A中還有數沒有處理
    while (i >= 0) {
        // 依舊須要判斷進位
        if (A[i]+tem >= 10) {
            result.add(A[i]+tem-10);
            tem = 1;
        } else {
            result.add(A[i]+tem);
            tem = 0;
        }
        i--;
    }
    // 判斷最高位是否存在進位
    if (tem != 0) {
        result.add(tem);
    }
    // 反轉result
    Collections.reverse(result);
    return result;
}


03 第二種解法

咱們還能夠對第一種解法再簡化下。

思路:將A中每次從後往前取的數,加到K上面(K最大爲10000,不存在越界問題),而後每次取K的最後一位數(藉助取餘),計算完後將K除以10,直到K等於0。

public List<Integer> addToArrayForm2(int[] A, int K) {
    List<Integer> result = new ArrayList<Integer>(); 
    int i = A.length-1, tem = K;
    while (i >= 0 || tem > 0) {
        if (i >= 0) {
            tem += A[i--];
        }
        result.add(tem%10);
        tem /= 10;
    }
    // 反轉result
    Collections.reverse(result);
    return result;
}


04 小結

算法專題目前已連續日更超過七個月,算法題文章239+篇,公衆號對話框回覆【數據結構與算法】、【算法】、【數據結構】中的任一關鍵詞,獲取系列文章合集。

以上就是所有內容,若是你們有什麼好的解法思路、建議或者其餘問題,能夠下方留言交流,點贊、留言、轉發就是對我最大的回報和支持!

相關文章
相關標籤/搜索