题目描述
给定一个数组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中元素的组成,其实是两个累乘积的乘积,两个累乘积分别是:A[0]A[1]…A[i-1] 和 A[i+1]…*A[n-1]。
首先,将B构建成一个如下数组:B[i] =A[0]A[1]…*A[i-1],需要做一个正向的循环,令B中每一个元素等于第一个累乘积;
然后,在B的基础上做一个反向的循环,B中的元素乘以第二个累乘积得到最终结果。
代码
public class Solution {
public int[] multiply(int[] A) {
if(A==null) return null;
if(A.length == 0) return A;
int[] B = new int[A.length];
B[0] = 1;
for(int i=1;i<A.length;i++){
B[i] = A[i-1]*B[i-1];
}
int temp=1;
for(int i=A.length-1;i>=0;i--){
B[i] = B[i]*temp;
temp = temp*A[i];
}
return B;
}
}