剑指offer之构建乘积数组
题目描述
给定一个数组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] | 1 | A[1] | A[2] | .. | A[n-1] |
---|---|---|---|---|---|
B[1] | A[0] | 1 | A[2] | .. | A[n-1] |
B[2] | A[0] | A[1] | 1 | .. | A[n-1] |
.. | A[0] | A[1] | .. | 1 | A[n-1] |
B[n-1] | A[0] | A[1] | A[2] | .. | 1 |
解题代码
public static void main(String[] args) {
int[] a = {2, 3, 1, 4, 2, 5};
System.out.println(JSON.toJSONString(multiply(a)));
}
public static int[] multiply(int[] a) {
int n = a.length;
int[] b = new int[n];
// 从左往右累乘
for (int i = 0, product = 1; i < n; product *= a[i], i++) {
b[i] = product;
}
// 从右往左累乘
for (int i = n - 1, product = 1; i >= 0; product *= a[i], i--) {
b[i] *= product;
}
return b;
}