题目:给定一个数组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]。不能使用除法。
思路: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]。C[i]自上而下来计算,即C[i] = C[i-1]*A[i-1];D[i]自下而上来计算,即D[i] = D[i+!]*A[i+1]。时间复杂度为O(n)。
public int[] multiply(int[] A) {
if(A == null || A.length <= 0){
return null;
}
int length = A.length;
int[] B = new int[length];
int[] forword = new int[length];
int[] back = new int[length];
forword[0] = 1;
back[length-1] = 1;
for(int i=1;i<length;i++){
forword[i] = forword[i-1]*A[i-1];
}
for(int i=length-2;i>=0;i--){
back[i] = back[i+1]*A[i+1];
}
for(int i=0;i<length;i++){
B[i] = forword[i]*back[i];
}
return B;
}