用Javascript实现计算数字步的算法共享

这两天看到一个GitHub上的一个伟大的神。他知道他对算法很感兴趣。他看到了一个计算台阶数的算法。感觉有点意思,所以他意识到了自己的一个。

算法描述与实现原理

给出了一个整数来显示步行有多少种方法可以到达目标,比如4号,还有几种方法可以走。

复制代码代码如下所示:

{ 1, 3 }

{ 4 }

{ 1, 1, 2 }

{ 2, 2 }

{ 1, 1, 1,1 }



事实上,通过以上的结合可以得出以下结论。

1。首先列出所有项目的组合1

2。依次从左到右的1个组合。

三.递归集以上,在项目中发现的1的指标,然后计算出2项的值在左,其结果是递归。

4。排除1和2的情况

提供以下三个工具函数:

复制代码代码如下所示:

数组中的计算值

函数计算(精){

返回eval(arg.join(+));

}

输出数组值

函数打印(精){

对于(var i = 0;i < arg.length;i++){

console.log(Arg {我});

}

}

/检查它是积极的还是消极的。

功能hasrepeat(SRC,dist){

如果(dist.length!= 2)返回false;

对于(var i = 0,len = src.length;我< len;i++){

如果(dist.length = = SRC {我},{长度)

如果(dist { 0 } = = SRC {我} { 1 }){

返回true;

}

}

}

返回false;

}



遵循算法的实现:

复制代码代码如下所示:

功能countsteps(N){

var计数= 0,i,j = 0;

var结果{ };

无功newresult = { };

var源代码};

无功temparg = { };

总共1代数组

对于(i = 1;i <;i + +){

Source.push(1);

}

如果(n = 2){

对于(j=1;j < n 1;j + +){

temparg.length = 0;

如果(j<1){

1增加数组从左到右生成

11 ..111 ..1…

Array.prototype.push.apply(temparg,source.slice(0,j));

Temparg.push(计算(source.slice(J,N)));

result.push(temparg.slice(0));

数组递归的内容,直到1。

结合(temparg.slice(0));

}

}

}

该组合包含1个数组

111 - > 21 - > 3

函数合并(精){

无功linearg = { };

对于(var i = 0;i < arg.length;i++){

如果({ { } = 1){

如果(我= = 0 | | {我= = 1)

Linearg.push(计算(arg.slice(0,2)));

Array.prototype.push.apply(linearg,arg.slice(2,精氨酸。长度));

如果(!hasrepeat(结果,linearg)){

result.push(linearg);

结合(linearg.slice(0));

}

返回;

}

}

}

}

2 1以上

如果(n=2){

result.push({ 2 });

}

所有的1个

result.push(来源);

所有输出 /步骤

打印(结果);

console.log('altogether:+ +方法result.length走);

}

操作

(4)countsteps;

以下输出

*

{ 1, 3 }

{ 4 }

{ 1, 1, 2 }

{ 2, 2 }

{ 1, 1, 1,1 }

总之:5种行走方式

* /



总结

事实上,该算法可以应用到一类的游戏,当距离某些词的两物体之间,所有可能的业务流程,当然,也可以应用到其他地方,虽然算法的最前端工程师的实践相对较少,但仍有存在的价值,很多UI中使用该算法的细节,以后有时间会把更多的对算法的相关文章,欢迎大家多提宝贵意见。