除自身以外数组的乘积

题目链接

除自身以外数组的乘积

题目描述

除自身以外数组的乘积_第1张图片

注意点

  • answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积
  • 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内
  • 数组中元素可能为0

解答思路

  • 第一次遍历计算所有元素的乘积,第二次遍历根据所有乘积值除以该位置元素值就等于除自身以外数组的乘积,但是要注意该处元素为0的情况,所以需要分情况讨论:
    (1)如果数组中有多个元素为0,则所有的除自身以外数组的乘积都为0
    (2)如果数组中只有一个元素为0,则除元素0的位置外其他自身以外数组的乘积都为0
    (3)如果数组中没有元素0,则正常进行计算即可

代码

class Solution {
    public int[] productExceptSelf(int[] nums) {
        int[] res = new int[nums.length];
        int sum = 1;
        int zeroLoc = -1;
        for (int i = 0; i < nums.length; i++) {
            // 有多个0所有自身外的乘积都为0
            if (zeroLoc != -1 && nums[i] == 0) {
                return res;
            }
            if (nums[i] == 0) {
                zeroLoc = i;
                continue;
            }
            sum *= nums[i];
        }
        // 有一个0除了其本身外其他自身外的乘积都为0
        if (zeroLoc != -1) {
            res[zeroLoc] = sum;
            return res;
        }
        // 无0正常情况
        for (int i = 0; i < nums.length; i++) {
            res[i] = sum / nums[i];
        }
        return res;
    }
}

关键点

  • 考虑元素为0的特殊情况

你可能感兴趣的:(算法TOP100,数据结构,算法,leetcode)