用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中使用该算法的细节,以后有时间会把更多的对算法的相关文章,欢迎大家多提宝贵意见。