用两个数组left和right,left[i]=nums[0]*nums[1]...nums[i-1],right[i]=nums[i+1]*nums[i+2]...*nums[len-1],最终,res[i]=left[i]*right[i]。
class Solution {
public int[] productExceptSelf(int[] nums) {
int left[]=new int[nums.length];
left[0]=1;
for(int i=1;i<nums.length;i++)
left[i]=left[i-1]*nums[i-1];
int right[]=new int[nums.length];
right[nums.length-1]=1;
for(int i=nums.length-2;i>=0;i--)
right[i]=right[i+1]*nums[i+1];
int re[]=new int[nums.length];
for(int i=0;i<nums.length;i++)
re[i]=left[i]*right[i];
return re;
}
}
常数空间的程序:
class Solution {
public int[] productExceptSelf(int[] nums) {
int[] res = new int[nums.length];
int left = 1, right = 1;
for (int i = 0; i < nums.length; i++) {
res[i] = left;
left *= nums[i];
}
for (int i = nums.length - 1; i >= 0; i--) {
res[i] *= right;
right *= nums[i];
}
return res;
}
}