51.構(gòu)建乘積數(shù)組
給定一個數(shù)組A[0,1,...,n-1],請構(gòu)建一個數(shù)組B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。
不能使用除法。(注意:規(guī)定B[0]和B[n-1] = 1)
通過B[i]的構(gòu)成不難發(fā)現(xiàn)它總由左右兩個部分組成,所以我們可以用兩個輔助數(shù)組,一個數(shù)組left用來存從0到i-1的所有乘積,一個數(shù)組right用來存length-1到i+1的所有乘積,然后B[i]=left[i-1]*right[i+1]即可。
代碼如下
public class Solution {
public int[] multiply(int[] A) {
int length = A.length;
int[] left = new int[length];
int[] right = new int[length];
int[] res = new int[length];
left[0] = A[0];
right[length-1] = A[length-1];
for(int i = 1;i<length-1;i++){
left[i] = A[i]*left[i-1];
}
for(int j = length-2;j>0;j--){
right[j] = A[j]*right[j+1];
}
res[0] = right[1];
res[length-1] = left[length-2];
for(int k=1;k<length-1;k++){
res[k] = left[k-1]*right[k+1];
}
return res;
}
}