剑指offerDay21----构建乘积数组

题目:给定一个数组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]。不能使用除法。

思路:

方法一:直接双层循环即可。

方法二:

源码:GitHub源码

方法一:

public class Solution {
    public int[] multiply(int[] A) {
        if(A == null || A.length == 0) return A;
        int[] B = new int[A.length];
        for(int i = 0;i < A.length;i++){
            B[i] = 1;
        }
        for(int i = 0;i < A.length;i++){
            for(int j = 0;j < B.length;j++){
                if(i == j) continue;
                B[i] *= A[j];
            }
        }
        return B;
    }
}

方法二:

public class Solution {
    public int[] multiply(int[] A) {
        if(A == null || A.length == 0) return A;
        int[] B = new int[A.length];
        int[] C = new int[A.length];
        int[] D = new int[A.length];
        C[0] = 1;
        D[A.length - 1] = 1;
        for(int i = 1;i < A.length;i++){
            C[i] = C[i - 1] * A[i - 1];
        }
        for(int i = A.length - 2;i >= 0;i--){
            D[i] = D[i + 1] * A[i + 1];
        }
        for(int i = 0; i < A.length;i++){
            B[i] = C[i] * D[i];
        }
        return B;
    }
}

你可能感兴趣的:(剑指offerDay21----构建乘积数组)