构建乘积数组

问题陈述

给定一个数组A[ ],请构建一个数组B[ ],其中B的元素B[i]=A[0]×A[1]×……×A[i-1]×A[i+1]×……×A[n-1]。

思路分析

分析题意,可知B[i]等于A[i]左边的元素乘积再乘以A[i]右边元素乘积。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public int[] constructArr(int[] a) {
if(a.length == 0) return new int[0];
int[] b = new int[a.length];
b[0] = 1;
int tmp = 1;
for(int i = 1; i < a.length; i++) {//计算左边的乘积
b[i] = b[i - 1] * a[i - 1];
}
for(int i = a.length - 2; i >= 0; i--) {//计算右边的乘积
tmp *= a[i + 1];
b[i] *= tmp; //b[i]等于左右相乘。
}
return b;
}
}