題目描述:
給定一個數組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]。
樣例:
輸入:[1, 2, 3, 4, 5]
輸出:[120, 60, 40, 30, 24]
分析:
首先計算數組B中每個下標下左側元素的乘積,
從i=1開始,因爲B[0]左側沒有元素:
B[1]=A[0]
B[2]=B[1]*A[1]
B[3]=B[2]*A[2]
…
B[n-1]=B[n-2]A[n-2]
然後從倒數第二個位置開始計算右側元素的乘積
B[n-2]*=A[n-1]
B[n-3]=A[n-1]*A[n-2]
…
B[0]=A[n-1]*A[n-2]*…*A[2]
B[0]=A[n-1]*A[n-2]*…A[2]*A[1]
public int[] multiply1(int[] A) {
int[] B=new int[A.length];
if(A==null||A.length==0)
return B;
B[0]=1;
for(int i=1;i<A.length;i++) {
B[i]=B[i-1]*A[i-1];
}
int left=1;
for(int i=A.length-2;i>=0;i--) {
left*=A[i+1];
B[i]*=left;
}
return B;
}