劍指Offer刷題Java版——構建乘積數組

題目

給定一個數組A[0,1,…,n-1],請構建一個數組B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。

解題思路

引用的牛客網的答案
既然不能用乘法,分析題目,我們可以將乘積拆爲兩項。即:

C[i] = A[0] * A[1] *...*A[i-1]
D[i] = A[i + 1] *...* A[n-1]
B[i] = C[i] * D[i]
我們先來計算C[i],使用數學歸納法:
C[0] = 1
C[1] = A[0]
C[2] = A[0] * A[1]
C[3] = A[0] * A[1] * A[2]
...
我們可以得出規律:C[i] = C[i-1] * A[i -1](i >=1)
我們繼續用數學歸納法計算D[i]:
D[n - 1] = 1
D[n - 2] = A[n -1]
D[n - 3] = A[n - 1] * A[n - 2]
我們可以得出規律:D[i] = D[i + 1]* A[i + 1](i <= n-2)

解題代碼

public int[] multiply(int[] A) {
        int[] res = new int[A.length];
        res[0] = 1;

        for (int i = 1;i<res.length;i++){
            res[i] = res[i-1]*A[i-1];
        }

        for (int i = res.length-2,temp=1;i>=0;i--){
            temp = temp* A[i+1];
            res[i] *= temp;
        }
        return res;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章