【发布时间】:2022-01-23 22:06:25
【问题描述】:
问题:
给定一个整数数组,返回一个新数组,使得新数组索引 i 处的每个元素都是原始数组中除 i 处之外的所有数字的乘积。
例如:
-
如果我们的输入是 [1, 2, 3, 4, 5],那么预期的输出将是 [120, 60, 40, 30, 24]。
-
如果我们的输入是 [3, 2, 1],那么预期的输出将是 [2, 3, 6]。
解决方案 1(使用嵌套循环):我可以通过如下嵌套循环来解决这个问题:
const input = [1, 2, 3, 4, 5];
function output(items) {
const finalArray = [];
for (let i = 0; i < items.length; i++) {
let multipliedNum = 1;
items.forEach((item, indx) => {
if (i !== indx) {
multipliedNum = multipliedNum * item;
}
});
finalArray.push(multipliedNum)
}
return finalArray;
}
console.log(output(input))
我正在尝试找出另一个在输出函数中没有嵌套循环的解决方案?非常感谢任何帮助或建议。
【问题讨论】:
-
数组中值的范围是多少?值可以为零吗?
-
数学时间:“所有元素的乘积,除了
i处的元素”与“所有元素的乘积,除以i处的元素”相同。因此,您只需要两次迭代而无需嵌套:第一次计算乘积,然后第二次生成所有请求的值。 -
@GenericUser 现在假设数组中没有零。
标签: javascript arrays