题目:给定一个数组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]。不能使用除法。
思路:既然不能乘所在坐标的值,那么就分开,先乘i左边的数,知道乘到i,然后乘i右边的。
代码:
public int[] multiply(int[] A) {
int length = A.length;
int[] b = new int[length];
if (length < 2) {
return b;
}
b[0] = 1;
// 先乘i左边的数
for (int i = 1 ; i < length ; i++) {
b[i] = b[i - 1] * A[i - 1];
}
int tmp = 1;
// 再乘i右边的数
for (int i = length - 2 ; i >= 0 ; i--) {
tmp *= A[i + 1];
b[i] *= tmp;
}
return b;
}