
解题思路:不允许用除法,所以可以考虑前缀和的思路。最终结果的任意一个索引对应的数都是nums数组对应索引左边所有数的乘积*右边所有数的乘积,所以先遍历两遍用两个数组记录,然后最后再相乘写入对应的索引的值。(可以更省空间的话就只在结果数组上操作,左边照常,右边的话用一个变量来表示乘积)
class Solution {public int[] productExceptSelf(int[] nums) {int[] prenum =new int[nums.length];int[] revnum = new int[nums.length];int[] res = new int[nums.length];Arrays.fill(prenum,1);Arrays.fill(revnum,1);for(int i=0;i<nums.length;i++){if(i==0) prenum[i] = nums[i];else prenum[i] *= prenum[i-1] * nums[i];}for(int i=nums.length-1;i>-1;i--){if(i==nums.length-1) revnum[i] = nums[i];else revnum[i] *= revnum[i+1] * nums[i];}for(int i=0;i<nums.length;i++){if(i==0) res[i] = revnum[i+1];else if(i==nums.length-1) res[i] = prenum[i-1];else res[i] = prenum[i-1] * revnum[i+1];}return res;}
}