本題首先需要清楚的理解題目的意思,然後在去想法解題。
题目描述
给定一个数组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]。不能使用除法。
有些題目看着不是很清晰的話,可以適當的去畫圖觀察一下,比如本題數組就取A[1,2,3,4,5]這些元素。
那麼B[i]與A[]的關系畫個圖就很明了了。B[i]就是求數組A每個元素不包含A[i]的乘機。
如果可以用除法就很简单了,B[i]即A每行元素相乘除以A[i]即可。
import java.util.ArrayList;
public class Solution {
public int[] multiply(int[] A) {
int n=A.length;
if(n==0)
return A;
int[] B = new int[n];
//将数组A的值分为两部分,0到(i-1) 和 (i+1)到(n-1)
//B[i]的值即是前面一部分 乘以后面一部分了,这样就不包含A[i]了
//B[0]=1是因为i=0是前部分没有数据,1×后面即可
B[0]=1;
//本次循环是先求出B[i]值的前部分,没有乘后部分呢
//
for(int i =1;i<n;i++){
B[i]=B[i-1]*A[i-1];
}
//本次循环实在求出B前部分的基础上,在乘以后部分。这样B[i]就是完整的了
//注意循环是从后面往前走的,画个图就明白了。
int temp=1;
for(int i=n-2;i>=0;i--){
temp*=A[i+1];
B[i]*=temp;
}
return B;
}
}