思路
通过辅助数组的方式
- 第一个从左向右的辅助数组乘积
- 第二次从右向左的辅助数组乘积
- 对于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;}
}