除自身以外数组的乘积

给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。

function productExceptSelf(nums) {
    let arr = []
    for(let i = 0;i < nums.length;i++){
        let sum = 1
        for(let j = 0;j < nums.length;j++){
            let jItem = nums[j]
            if(i != j){
                sum *= jItem 
            }
        }
        arr.push(sum)
    }
    return arr
}

 

const productExceptSelf = (nums) => {
    const length = nums.length;
    const answer = new Array(length);
    // answer[i] 表示索引 i 左侧所有元素的乘积
    // 因为索引为 '0' 的元素左侧没有元素, 所以 answer[0] = 1
    answer[0] = 1;
    for (let i = 1; i < length; i++) {
        answer[i] = nums[i - 1] * answer[i - 1];
    }
    // R 为右侧所有元素的乘积
    // 刚开始右边没有元素,所以 R = 1
    let R = 1;
    for (let i = length - 1; i >= 0; i--) {
        // 对于索引 i,左边的乘积为 answer[i],右边的乘积为 R
        answer[i] = answer[i] * R;
        // R 需要包含右边所有的乘积,所以计算下一个结果时需要将当前值乘到 R 上
        R *= nums[i];
    }
    return answer;
};

  

posted @ 2020-07-30 11:26  671_MrSix  阅读(116)  评论(0编辑  收藏  举报