Javascript 将数字相加

Javascript 将数字相加,javascript,loops,for-loop,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岁 有谁能给我建议最好的方法吗?这个转换遵循指定的求和方法,但我也得到了最终结果21,所以请指定如何得到85 var ary = [0,1,0,4,1], transform

我想在数组上循环,同时将数字相加

在阵列上循环时,我想将当前数字添加到下一个

我的数组看起来像

[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岁


有谁能给我建议最好的方法吗?这个转换遵循指定的求和方法,但我也得到了最终结果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);

我得到的结果是21而不是85。此代码可以优化为仅使用单个阵列。无论如何,它完成了任务

var输入=[0,1,0,4,1];
函数计算(输入){
如果(input.length==1){
返回输入;
}
var结果=[];
对于(变量i=0;i警报(计算(输入))如果你确实希望答案是21(看起来应该是这样),那么你真正想做的事情与答案密切相关。
我不熟悉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);
}
var数组=[0,1,0,4,1]
int结果=0;
for(int i=0;i
这将在每个迭代的
结果中输入以下数字:

  • 0+=0*1-->0
  • 0+=1*4-->4
  • 4+=0*6-->4
  • 4+=4*4-->20
  • 20+=1*1-->21
  • 这避免了在尝试迭代创建越来越短的数组时出现的所有混乱的数组操作;如果您有一个好的nChooseK()实现,它也会更快。
    现在,为nChooseK()函数找到一个有效的算法是另一回事,但这是一项相对常见的任务,所以应该不会太难(通过谷歌搜索“n choose k algorithm”就可以了)。有些语言甚至在标准的数学库中有组合函数。

    发布您已经编写的代码。我认为您可以在复杂度n*log(n)中这样做。请检查分治算法,您可以在概念上做类似的事情,而不是在结果上。你可以检查这个例子,如果我继续按照你的方式计算,数组看起来像{0,1,0,4,1},{1,1,4,5},{2,5,9},{7,14},{21};无法联系到85。正确吗?@tobyUCT-除非
    [2,5,9]
    应导致
    [7,1,4]
    ,然后
    [8,5]
    。如果两位数的结果被分开(
    14
    变成
    1,4
    )。@j08691那么[8,5]应该变成[13],不是吗?但后来分成[1,3]和[4]?