思想:
本题目的难点在于减少重复计算,建立上三角和下三角,可以避免重复计算的问题,时间复杂度为O(n)。
代码如下:
class Solution {
public int[] constructArr(int[] a) {
if(a.length == 0) return new int[0];
int[] b = new int[a.length];
int tmp = 1;
//分别计算上三角和下三角矩阵
b[0] = 1;
//先计算下三角
for(int i = 1; i < a.length; i++){
b[i] = b[i - 1] * a[i - 1];
}
//计算上三角
for(int j = a.length - 2; j >= 0; j--){
tmp *= a[j + 1];
b[j] *= tmp;
}
return b;
}
}