除自身以外数组的乘积

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var productExceptSelf = function(nums) {
    let left = []
    left[0] = 1;
    let right = []
    right[nums.length-1] = 1
    for(let i=1;i<nums.length;i++){
        left[i] = left[i-1]*nums[i-1];
    }
    for(let j=nums.length-2;j>=0;j--){
        right[j] = right[j+1]*nums[j+1]
    }
    let temp = []
    for(let k=0;k<nums.length;k++){
        temp[k] = left[k]*right[k]
    }
    return temp
};

主要的方式:nums[i]对应的乘积就是其前缀和后缀相乘之后的数据,那么如何确定前缀和后缀呢,前缀就是(前一位数据前一位数据的前缀) ,后缀就是(后一位数据后一位数据的后缀),最前面和最后面的前缀及后缀都是1

var productExceptSelf = function(nums) {
    let answer = []
    answer[0] =1
    for(let i=1;i<nums.length;i++){
        answer[i] = answer[i-1]*nums[i-1]; //当前元素的前缀的乘积 = 当前元素的前一位元素 * 前一位元素的前缀 
    }
    let R =1;
    for(let j=nums.length-1;j>=0;j--){
        answer[j] = R * answer[j]  //  当前元素乘积 = 当前元素前缀*当前元素后缀
        R = R * nums[j] //下一元素的后缀 = 当前的后缀 * 当前元素 
    }
    return answer
};

主要是方式:当前方法主要是为了降低时间和空间上所消耗的资源。
来源:https://leetcode-cn.com/problems/product-of-array-except-self/

原文地址:https://www.cnblogs.com/panjingshuang/p/13138148.html