题目:给定一个数组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[n-1]
B[1]=A[0]*A[2]*A[3]*.......A[n-1]
B[2]=A0]*A[1]*A[3]*A[4]*.......A[n-1]
B[n]=A[0]*A[1]*A[2]*A[3]*.......A[n-1]
发现每一项只是缺少本身 当成1即可
最直接的做法就是直接乘 :while(i!=length){
int temp =A[i]
B[i]=1 A[i]=1
for(int j=0;j<length;j++){
B[i]=B[i]*A[j];
}
A[j]=temp;i++
}
方法二:思路一样 只是减少了重复的计算
/*
* 给定一个数组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]。不能使用除法。
*
*/
public class multiply1 {
public int[] multiply(int[] A) {
int length=A.length;
int [] B=new int[length];
if(length!=0){
B[0]=1;
//上三角
for(int i=1;i<length;i++){
B[i]=B[i-1]*A[i-1];
}
int temp=1;
//下三角
for(int j=length-2;j>=0;j--){
temp*=A[j+1];
B[j]*=temp;
}
}
return B;
}
}