leetcode hot 17

解题思路:不允许用除法,所以可以考虑前缀和的思路。最终结果的任意一个索引对应的数都是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;
    }
}
posted @ 2025-03-03 19:09  kukudev  阅读(8)  评论(0)    收藏  举报