有n步台階,一次只能上1步或2步,共有多少種走法?


第一種(用遞歸)

public static int step(int n){
   if(n < 1){
      throw new IllegalArgumentException("n不能小於1。");
   }
   if(n == 1 || n == 2){
      return n;
   }
   return step(n - 1) + step(n - 2);
}

推導過程(有助於理解)

image
image
image
image

循環迭代(動態規划DP)效率更高

> 動態規划

動態規划包含三個重要的概念:最優子結構,邊界,狀態轉移公式。
image

上代碼

public static int step(int n){
   if(n < 1){
      throw new IllegalArgumentException("n不能小於1。");
   }
   if(n == 1 || n == 2){
      return n;
   }
   int a = 1;
   int b = 2;
   int tem = 0;
   for (int i = 3; i <= n; i ++){
      tem = a + b;
      a = b;
      b = tem;
   }
   return tem;
}

注:
參考博客:https://www.sohu.com/a/149075950_684445


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM