首页 > 解决方案 > 函数返回无效值

问题描述

实现 getarrayproduct 函数,它获取一个数字数组并返回一个相同大小的数组,其中 numbers[I] 等于该元素左右所有元素的乘积。

笔记:

初始数组至少包含 2 个元素 数组只包含正数 数字可以重复 示例:

getArrayProduct([1,5,2]) === [10,2,5]

第一个元素 10 是除第一个元素 1 之外的所有数组元素的乘积 第二个元素 2 是除第二个元素 5 之外的所有数组元素的乘积 第三个元素 5 是除第三个元素 2 之外的所有数组元素的乘积

 getArrayProduct([12,20]) === [20,12]

数组 20 中的第一个元素是除第一个元素之外的所有数组元素的乘积 第二个元素 12 是除第二个元素之外的所有数组元素的乘积

我的代码

function getArrayProduct(numbers) {

  let arr = []
  let a = 0;
  let l = numbers.length;

  if (numbers.length == 2) {
    arr = numbers.reverse()
    return arr
  }

  while(true) {
    if (a + 1 !== NaN) {
      if ((a + 1) == numbers.length) {
        arr[a] = numbers[a] * numbers[0]
      } else {
        arr[a] = numbers[a] * numbers[a+1]
      }
    }

    if (a > numbers.length - 2) {
      break;
    }

    a++;
    l--;
  }

  return arr
}

函数“getArrayProduct”应该返回正确的数组:

[4, 5, 2, 19, 8, 80]

预期的:

"[121600,97280,243200,25600,60800,6080]"

已收到:

"[20,10,38,152,640,320]"

和 getArrayProduct([1,5,2]) === [10,2,5] - (预期)和我的结果 [5,10,2]

标签: javascript

解决方案


替代方法:例如:[1,5,2] 一次将数组中的所有数字相乘。你会得到 ans 1x5x2 = 10

现在您的输出数组将是 [product/1, product/5, product/2] == [10/1,10/5,10/2] == [10,2,5]

对于数组中的每个索引,此方法将消除一次又一次地将相同数字相乘的工作。

function getArrayProduct(numbers) {

  let arr = []
  let product = 1, i=0;

for (i=0;i<numbers.length;i++){
    product=product*numbers[i];
}

for(i=0;i<numbers.length;i++)
{ 
    arr[i] = product/numbers[i];
}

return arr;
}

推荐阅读