/**
* @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/