LeetCode 第238题: 除自身以外数组的乘积

2021-06-07  本文已影响0人  放开那个BUG

1、前言

题目描述

2、思路

这道题的考察点我觉得不在于方法上,而在于智力上。首先,我们知道某个位置上 nums[i] 的乘积为:nums[0] * nums[1] * ... * nums[i - 1] * 1 * nums[i + 1] * ... * nums[n - 1]。我们数组中每个位置的上的乘积画出来:


由此看出,我们只要将乘积分为上三角、下三角,分别两次遍历即可。

3、代码

public class Q238_ProductExceptSelf {

    public int[] productExceptSelf(int[] nums) {
        if(nums == null || nums.length == 0){
            return new int[]{};
        }

        int p = 1, q = 1;
        int[] res = new int[nums.length];

        // 上三角的遍历
        for (int i = 0; i < nums.length; i++) {
            res[i] = p;
            p = p * nums[i];
        }

        for(int i = nums.length - 1; i >= 0; i--){
            res[i] = res[i] * q;
            q = q * nums[i];
        }


        return res;
    }

    public static void main(String[] args) {
        int[] nums = {1,2,3,4};
        int[] res = new Q238_ProductExceptSelf().productExceptSelf(nums);
        for (int re : res) {
            System.out.println(re);
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读