LeetCode Climbing Stairs階段を登る

3958 ワード


再帰法(TLEコード):
 1 class Solution {

 2 public:

 3     int climbStairs(int n) {

 4         if(n==0)

 5             return 1;

 6         if(n<0)

 7             return 0;

 8         return (climbStairs(n-1)+climbStairs(n-2));

 9     }

10 };

 
ダイナミックプランニング:
 1 class Solution {

 2 public:

 3     int climbStairs(int n) {

 4         if(n==1) return 1;

 5         if(n==2) return 2;

 6         int a=1,b=2,c=0,i;

 7         for( i=0;i<n-2 ;i++ ){

 8             c=a+b;

 9             a=b;

10             b=c;

11         }

12         return c;

13     }

14 };

 
标题:階段を登って、1本の階段の階数を与えて、毎回1歩、あるいは2歩一緒に歩くことができて、それでは2つの歩き方がこのn階を歩き終えることができます.この階段を何種類歩けばいいか聞いて、戻ります.
考え方:n=1の場合、1を返す.n=2の場合、2を返します.n>3の場合、n−1およびn−2の返される数が返される.たとえばn=3であれば,1+2の値を返し,n=4で3+2を返す.類推する.
ツッコミ:この問題に困惑していたのか、再帰で書いてみたら、だめだった.コードは簡単だったが.それからいろいろな方法を考えて、この再帰法でそれぞれの戻り値を計算して、法則を見つけました.なるほど.~