题目中要求不能使用除法,所以不能将nums的乘积求出,在对应除以对应位。由于要求时间复杂度为o(n),所以也不能用二次循环的方法。
class Solution {
public int[] constructArr(int[] a) {
if(a.length == 0){return a;}
int len = a.length;
int[] left = new int[len];
int[] right = new int[len];
left[0] = right[len-1] = 1;
for(int i = 1; i<len; i++){
left[i] = left[i-1]*a[i-1];
}
for(int j = len-2; j>=0; j--){
right[j] = right[j+1]*a[j+1];
}
int[] ans = new int[len];
for(int i = 0; i<len; i++){
ans[i] = left[i]*right[i];
}
return ans;
}
}
需要注意的是赋初值的部分,不仅要对left赋初值,还需要对right赋初值。否则计算的结果就会出错。