构建乘积数组
题目描述:
给定一个数组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[0] = A[1] * A[2] * A[3] * A[4] *....*A[n-1] ;(没有A[0])
>B[1 ]= A[0] * A[2] * A[3] * A[4] *....*A[n-1] ;(没有A[1])
>B[2] = A[0] * A[1] * A[3] * A[4] *....*A[n-1] ;(没有A[2])
....
即B[i]项等于A数组所有数的乘积,但是去除A[i]项。由于是乘法,所以直接令A[i]项等于1即可。
代码中加个flag标志做判断即可。
import java.util.ArrayList;
public class Solution {
public int[] multiply(int[] A) {
if(A==null||A.length==0)
return A;
int[] left = new int[A.length];//记录除了自己,左边的乘积
int[] right = new int[A.length];//记录除了自己,右边的乘积
right[A.length-1] = 1;
for(int i = A.length-2;i>=0;i--){
right[i] = right[i+1]*A[i+1];
}
left[0] = 1;
for(int i = 1;i<A.length;i++){
left[i] = left[i-1]*A[i-1];
}
int[] B = new int[A.length];
for(int i = 0;i<A.length;i++){
B[i] = left[i]*right[i];
}
return B;
}
}