53.构建乘积数组

题目描述:

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

思路分析:

  我们可以把Bi=A[0]A[1]....A[i-1]A[i+1]..A[n-1]看成A[0]A[1]....A[i-1]和 A[i+1]*...A[n-1]两部分的乘积。因此数组B可以用一个矩阵来创建。

B0 1 A1 A2 ... An-2 An-1
B1 A0 1 A2 ... An-2 An-1
B2 A0 A1 1 ... An-2 An-1
... A0 A1 A2 1 An-2 An-1
Bn-2 A0 A1 A2 ... 1 An-1
Bn-1 A0 A1 A2 ... An-2 1

定义C[i]=A[0]...A[i-1]。可以自上而下的顺序计算出来,定义D[i]=A[i+1]...A[n-1]。可以自下而上进行计算。

代码:

import java.util.ArrayList;
public class Solution {
    public int[] multiply(int[] A) {
        int []B=new int [A.length];
        if(A==null||A.length==0)
            return null;
        B[0]=1;
        for(int i=1;i<B.length;i++){
            B[i]=B[i-1]*A[i-1];
        }
        int temp=1;
        for(int j=B.length-2;j>=0;j--){
            temp=temp*A[j+1];
            B[j]=B[j]*temp;
        }
        return B;
    }
}
原文地址:https://www.cnblogs.com/yjxyy/p/10935865.html