一起添加数字

时间:2015-07-14 14:25:35

标签: javascript loops for-loop

我想在将数字加在一起时循环遍历数组。

在循环数组时,我想将当前数字添加到下一个数组。

我的数组看起来像

[0,1,0,4,1]

我想做以下事情;

[0,1,0,4,1] - 0+1= 1, 1+0= 1, 0+4=4, 4+1=5

然后我会[1,1,4,5]执行以下操作; 1+1 = 2, 1+4=5, 4+5=9

依此类推,直到85岁。

任何人都可以建议最好的方法来解决这个问题

3 个答案:

答案 0 :(得分:0)

此变换遵循指定的求和方法,但我也得到21的最终结果,因此请指明如何达到85.

var ary = [0,1,0,4,1],
    transform = function (ary) {
        var length = ary.length;
        return ary.reduce(function (acc, val, index, ary) {
            if (index + 1 !== length) acc.push(ary[index] + ary[index + 1]);
            return acc;
        }, []);
    };
while (ary.length !== 1) ary = transform(ary);

答案 1 :(得分:0)

我得到的结果是21而不是85.此代码可以优化为仅使用单个数组。无论如何,它完成了工作。



var input = [0, 1, 0, 4, 1];

function calc(input) {
  if (input.length === 1) {
    return input;
  }
  var result = [];
  for (var i = 0; i < input.length - 1; i++) {
    result[i] = input[i] + input[i + 1];
  }
  return calc(result);
}

alert(calc(input));
&#13;
&#13;
&#13; 这是一个O(n ^ 2)算法。

答案 2 :(得分:0)

如果你确实希望答案是21(看起来应该是这样),那么你真正想要做的是与Binomial Theorem密切相关。 我不熟悉javascript,所以我将用c风格的伪代码编写一个例子:

var array = [0,1,0,4,1]
int result = 0;
for (int i = 0; i < array.length; i++)
{
    int result += array[i] * nChooseK(array.length - 1, i);
}

对于每个相应的迭代,这将把以下数字放入result

  1. 0 + = 0 * 1 - &gt; 0
  2. 0 + = 1 * 4 - &gt; 4
  3. 4 + = 0 * 6 - &gt; 4
  4. 4 + = 4 * 4 - > 20
  5. 20 + = 1 * 1 - &gt; 21
  6. 这避免了在尝试迭代创建更短和更短的数组时出现的所有令人困惑的数组操作;如果你有一个好的nChooseK()实现它也会更快。 现在,为nChooseK()函数找到一个有效的算法是一个不同的问题,但它是一个相对常见的任务,所以它不应该太困难(谷歌搜索“n选择k算法”应该工作得很好)。有些语言甚至在标准数学库中也有组合函数。