70. Climbing Stairs(동적 계획 문제)

1053 단어 Leetcode
Description
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Note: Given n will be a positive integer.
Solution
관건은 어떤 점프법이든 마지막 단계는 1이거나 2이다.
즉 n-1층에서 1step를 뛰거나 n-2층에서 2step를 뛴다.
f(n)=f(n-1)+f(n-2)
반복적으로 쓰는 방법은 매우 간단하다. 제출할 때 항상 Time Limit Exceed를 쓴다. 아래와 같다.
class Solution {
public:
    int climbStairs(int n) {
        //f(n)=f(n-1)+f(n-2)
        
        if(n==1)return 1;
        if(n==2)return 2;
        
        return climbStairs(n-1)+climbStairs(n-2);
     
    }
};

비귀속 알고리즘을 하나 더 쓰다.
class Solution {
public:
    int climbStairs(int n) {
        if(n==1)return 1;
        if(n==2)return 2;
        
        int s1=2;//   s-1    
        int s2=1;//   s-2    
        int result;
        for(int i=3;i<=n;i++)
        {
            result=s1+s2;
            s2=s1;
            s1=result;
        }
        return result;
    }
};

좋은 웹페이지 즐겨찾기