70. Climbing Stairs(一次只能爬1,2两节,有多少种方式)

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?

Example 1:

Input: 2
Output:  2
Explanation:  There are two ways to climb to the top.

1. 1 step + 1 step
2. 2 steps

 

Example 2:

Input: 3
Output:  3
Explanation:  There are three ways to climb to the top.

1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step





class Solution {
public:
    int climbStairs(int n) {
        int len = n;
        vector<int> nums = {1,2};
        vector<vector<int>>dp(len+1,vector<int>(n+1,0));
        dp[0][0]=1;
        for(int i =1;i <=len;i++) {
            for(int j = 0;j <=n;j++) {
                for(int x :nums) {
                    if(j-x>=0) {
                        dp[i][j]+=dp[i-1][j-x];
                    }
                }
                //cout << i << " " << j << " " << dp[i][j] << endl;
            }
        }
        int sum = 0;
        for(int k = 0;k <=n;k++) {
            sum+=dp[k][n];
        }
        return sum;
    }
};

 




f(1) = 1

f(2) = 2

f(3) = f(n-1)+f(n-2)

f(t) = f(t-1)+ f(t-2)

 

递归超时::

1 class Solution {
2     public int climbStairs(int n) {
3         if(n<3) return n;
4         return climbStairs(n-1) + climbStairs(n-2);
5     }
6 }

动态规划!!!!

 1 class Solution {
 2     public int climbStairs(int n) {
 3         int dp[] = new int[n+1];
 4         for(int i=0;i<=n;i++){
 5             if(i<3)
 6             dp[i] = i;
 7             else
 8                 dp[i] = dp[i-1]+dp[i-2];
 9         }
10         return dp[n];
11     }
12     
13 }

 

 

Fibonacci Number:

 

 1 class Solution {
 2     public int climbStairs(int n) {
 3         if(n<3) return n;
 4         int t1 = 1;
 5         int t2 = 2;
 6         int t3;
 7         for(int i=2;i<n;i++){
 8             t3 = t1+t2;
 9             t1 = t2;
10             t2 = t3;
11         }
12         return t2;
13     }
14     
15 }

 

posted @ 2018-04-05 11:45  乐乐章  阅读(228)  评论(0编辑  收藏  举报