思路
通过辅助数组的方式
- 第一个从左向右的辅助数组乘积
- 第二次从右向左的辅助数组乘积
- 对于0<i<N-1 他的数组乘积就是左边的数组乘积*右边数组乘积
- 然后再分类讨论i=0 就是右边1-N-1的数组乘积
- i=N-1就是左边从N-2到0的数组乘积
代码如下:
class Solution {
public static int[] productExceptSelf(int[] nums) {
if (nums==null||nums.length==0){
return nums;
}
int N=nums.length;
int[] lArr = new int[N];
int[] rArr = new int[N];
lArr[0]=nums[0];
for (int i = 1; i < N; i++) {
lArr[i]=lArr[i-1]*nums[i];
}
rArr[N-1]=nums[N-1];
for (int i =N-2; i>=0; i--) {
rArr[i]=rArr[i+1]*nums[i];
}
int[] ans = new int[N];
for (int i = 0; i <N; i++) {
if (i==0){
ans[i]=rArr[i+1];
}else if (i==N-1){
ans[i]=lArr[i-1];
}else {
ans[i]=lArr[i-1]*rArr[i+1];
}
}
return ans;
}
}