思路
利用两个空数组left(left[i]表示nums下标从0到i的乘积)和right(right[i]表示nums下标从n-1到i的乘积)
解题方法
返回数组nums[i]=right[i+1]*left[i-1],第一个元素和最后一个元素单独考虑
Code
class Solution {
public int[] productExceptSelf(int[] nums) {
int n=nums.length;
int left[]=new int[n];
int right[]=new int[n];
left[0]=nums[0];
right[n-1]=nums[n-1];
for(int i=1;i<n;i++){
left[i]=nums[i]*left[i-1];
}
for(int i=n-2;i>=0;i--){
right[i]=nums[i]*right[i+1];
}
for(int i=0;i<n;i++){
if(i==0){
nums[i]=right[i+1];
}else if(i==n-1){
nums[i]=left[i-1];
}else{
nums[i]=right[i+1]*left[i-1];
}
}
return nums;
}
}