题目
给你一个整数数组
nums,返回数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积 。
输入: nums = [1,2,3,4]
输出: [24,12,8,6]
题解
第一种
我们在函数中先创建两个空数组,分别是front和back,用于存储每个元素左边和右边的乘积,然后我们使用循环进行遍历数组中的每个元素,如果是第一个元素,则将其添加到front和back数组中,并且继续遍历下一个元素,否则我们则分别计算出当前元素左边的乘积和右边的乘积,并将结果添加到front和back数组中,然后我们在函数中在创建一个空数组res,用于存储计算结果,再次使用循环遍历数组中的每个元素,如果是第一个元素,则将back数组中的倒数第二个元素添加到res数组中,并继续遍历下一个元素,如果是最后一个元素,则将front数组中的倒数第二个元素添加到res数组中,并继续遍历下一个元素,否则就将front数组中第i-1个元素和back数组中倒数第i+2个元素的乘积添加到res数组中,最后,我们将res数组返回出去即可
var productExceptSelf = function(nums) {
const front = [];
const back = [];
for (let i = 0; i < nums.length; i ++) {
if (i === 0) {
front.push(nums[0]);
back.push(nums[nums.length - 1]);
continue;
}
const preFront = front[i - 1];
const preBack = back[i - 1];
front.push(preFront * nums[i]);
back.push(preBack * nums[nums.length - 1 - i]);
}
const res = [];
for (let i = 0; i < nums.length; i ++) {
if (i === 0) {
res.push(back[nums.length - 2]);
continue;
}
if (i === nums.length - 1) {
res.push(front[nums.length - 2]);
continue;
}
res.push(front[i - 1] * back[nums.length - 2 - i]);
}
return res;
};
第二种
我们在函数中首先定义一个常量len,表示原始数组的长度,接下来定义两个数组left和right,分别用于存储每个元素左侧和右侧的乘积,在left数组中,第一个元素为1,然后从第二个元素开始,每个元素的值都为前一个元素的值乘以原始数组中对应位置的值,在right数组中,最后一个元素为1,然后从倒数第二个元素开始,每个元素的值都为后一个元素的值乘以原始数组中对应位置的值,最后我们使用map方法对原始数组nums进行遍历,将其左侧的乘积和右侧的乘积相乘,得到该元素在新数组中的值返回出去即可
var productExceptSelf = function(nums) {
const len = nums.length;
const left = [1], right = [];
right[len-1] = 1;
for(let i = 1; i < len; i++){
left.push(left[i-1] * nums[i-1]);
right[len-i-1] = right[len-i] * nums[len-i];
}
return nums.map((item,index) => left[index] * right[index]);
};
坚持努力,无惧未来!