题目描述
给定一个数组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[n-1],B[n-1] = A[0] A[1] … A[n-2];)
代码一
思想
可以将B[i]分别分成左边的乘积,然后再乘上右边的乘积在一开规定B[0] = A[1] A[2] … A[n-1],B[n-1] = A[0] A[1] … A[n-2],所以可以假设B[0]的左边乘积是1,B[n-1]右边的乘积是1;这样B[0]还是等于A[1] A[2] … A[n-1],B[n-1] = A[0] A[1] … A[n-2].
public static int[] multiply(int[] A) {
int[] B = new int[A.length];
int res = 1;
//先计算左边的
for(int i=0;i<A.length;i++) {
B[i] = res;
res *= A[i];
}
//在在第一个for循环的基础上再乘上右边的
res = 1;
for(int i=A.length-1;i>=0;i--) {
B[i] *= res;
res *= A[i];
}
return B;
}