这段时间一直没怎么接触算法,昨天看到一个关于动态规划的题想到斐波那契数列。想到了那不是很好解决吗。但是如果你不知道这种规律性的东西是不是代表你不能解决这个问题?当然不是。事实上你甚至可以自己真的去台阶上试试。。。。哈哈,这道题是20个台阶每次一步或者两步。看来自己走是不行了
于是我们就要开发一个自己会走的程序,我们需要模拟每一步。第一步是走 1 或者走 2 ,所以第二步就是19 18 在第一步基础上我们需要再来19 18 部 ,然而第二步 在19基础上就是18 17 在18基础上就是17 16 。由此可见下一步的可能性是在上一步的基础 翻倍,当然是有条件的,就是剩下的不能为负数。写到这里我想大家心里应该有数了。但是还有个问题,我们怎么让机器人停下来,换句话来说就是怎么知道是最后一步。一千米比赛 ,我们怎么知道比赛结束了?当然是最后一名冲过终点,所以应该是每次一阶结束时候就是第20步。所以程序就很简单了。所以上台阶模拟器就开发完成了。
class Calc{
constructor(){
this.way=[]
this.step=1
this.status=null
}
run(){
if(this.status!=='over'){
this.nextStep()
return this.run()
}
else{
return this.way
}
}
nextStep(){
if(this.step==1){
this.way.push({step:this.step,way:[1,2],num:[20-1,20-2]})
}
else{
if(this.step==21){
this.status='over'
}
else{
let tmp=[]
for(var i=0;i<=this.way[this.step-2].num.length;i++){
if(this.way[this.step-2].num[i]-1>=0){
tmp.push(this.way[this.step-2].num[i]-1)
}
if(this.way[this.step-2].num[i]-2>=0){
tmp.push(this.way[this.step-2].num[i]-2)
}
}
this.way.push({step:this.step,way:[1,2],num:tmp})
}
}
this.step+=1
}
}