剑指Offer 10-II 青蛙跳台阶问题

202 阅读1分钟

一 题目

二 代码

//动态规划
let numWays = function(n) {
   if(n<0||n>100) return;
   //初始化
   //dp[i]表示青蛙跳到第i个台阶需要多少种方式
   let dp=[];
   dp[0]=dp[1]=1;
   dp[2]=2;
   for(let i=3;i<=100;i++){
       //青蛙要么是从前一个台阶跳一阶上来的,要么是从前前一个台阶跳两阶上来的
      dp[i]=(dp[i-1]+dp[i-2])%1000000007;
   }
   return dp[n];
};

//不用dp数组
let numWays = function(n) {
    if(n<0||n>100) return;
    if(n===0||n===1) return 1;
    if(n===2) return 2;
    let previous1=1;
    let previous2=2;
    let res;
    for(let i=3;i<=n;i++){
       res=(previous1+previous2)%1000000007;
       previous1=previous2;
       previous2=res;
    }
    return res;
 };