238. Product of Array Except Self
Leetcode
題目
Input: nums = [1,2,3,4]
Output: [24,12,8,6]Input: nums = [-1,1,0,-3,3]
Output: [0,0,9,0,0]解答
參考資料
Last updated
Input: nums = [1,2,3,4]
Output: [24,12,8,6]Input: nums = [-1,1,0,-3,3]
Output: [0,0,9,0,0]Last updated
var productExceptSelf = function(nums) {
let total = 1;
let zeroCount = 0;
const result = [];
for(let i=0; i<nums.length; i++) {
if (nums[i] !== 0) {
total *= nums[i];
result[i] = i;
} else {
// 用 '0' 代表這個元素是 0
result[i] = '0';
zeroCount++;
}
}
// 如果 0 大於兩個的話,回傳的所有元素都會是 0
if (zeroCount > 1) {
return result.map(r => 0);
}
for(let i=0; i<nums.length; i++) {
if (result[i] === '0') {
result[i] = total;
} else {
if (zeroCount > 0) {
// 0 有一個,所以怎麼乘都是 0
result[i] = 0;
} else {
result[i] = total / nums[i];
}
}
}
return result;
};var productExceptSelf = function (nums) {
const l2r = [];
const r2l = [];
const result = [];
let total = 1;
for (let i = 0; i < nums.length; i++) {
total *= nums[i];
l2r[i] = total;
}
total = 1;
for (let i = nums.length - 1; i >= 0; i--) {
total *= nums[i];
r2l[i] = total;
if (i === 0) {
result[i] = r2l[i + 1]
} else if (i === nums.length - 1) {
result[i] = l2r[i - 1]
} else {
result[i] = l2r[i - 1] * r2l[i + 1];
}
}
return result;
};var productExceptSelf = function (nums) {
const result = [];
let total = 1;
for (let i = 0; i < nums.length; i++) {
// 因為 result[i] 是前面所有元素的乘積,所以這裡先賦值 result[i]
result[i] = total;
total *= nums[i];
}
total = 1;
for (let i = nums.length - 1; i >= 0; i--) {
result[i] *= total;
total *= nums[i];
}
return result;
};