js台阶算法问题(上台阶模拟器)

       这段时间一直没怎么接触算法,昨天看到一个关于动态规划的题想到斐波那契数列。想到了那不是很好解决吗。但是如果你不知道这种规律性的东西是不是代表你不能解决这个问题?当然不是。事实上你甚至可以自己真的去台阶上试试。。。。哈哈,这道题是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
            
                 
                 
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值