除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。
题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。
请 不要使用除法
示例 1:
输入: nums = [1,2,3,4]
输出: [24,12,8,6]
示例 2:
输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]
我的思路
- 双重循环
- 循环,可以先计算每个元素左侧的乘积,再计算右侧的乘积,最后对应相乘。
网上思路
与我的第2个思路一样
1. 我的思路
- 双重循环
简单明了,去掉当前下标相同的那个数就行
let len = nums.length
let answer = new Array(len);
for (let i = 0; i < len; i++) {
let currentProduct = 1;
for (let j = 0; j < len; j++) {
if (i !== j) {
currentProduct *= nums[j];
}
}
answer[i] = currentProduct;
}
return answer;
- 左右乘积
左侧乘积:举个例子就明白了:
[1,2,3,4]中
1左边是空,所以左侧乘积为默认1
2左边是1,所以左侧乘积是1*1
右侧乘积同理
1左边是2,3,4,所以值为234
2左边是3,4,所以值3*4
以此类推
var productExceptSelf = function (nums) {
let len = nums.length;
let answer = new Array(len).fill(1);
let left = 1;
for (let i = 0; i < len; i++) {
answer[i] = left ;
left *= nums[i];
}
let right = 1;
for (let i = len - 1; i >= 0; i--) {
answer[i] *= right ;
right *= nums[i];
}
return answer;
};
总结
循环是基础。