1. 程式人生 > >Leetcode 70 Climbing Stairs 爬樓梯的方法(動態規劃)

Leetcode 70 Climbing Stairs 爬樓梯的方法(動態規劃)

題目描述:

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.


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

從樓梯最下面開始,每次可以爬1級或者2級,求爬到最上面的方法數

思路:

    1.典型的動態規劃問題。輔助陣列儲存到這一級的方法數,顯然ans[0]=ans[1]=1,之後每一級都有從下一級爬上來和下兩極爬上來兩種做法,即dp[i]=dp[i-1]+dp[i-2]

程式碼:

class Solution {
public:
    int climbStairs(int n) 
    {
        int ans[100];
        ans[0]=ans[1]=1;
        for(int i=2;i<=n;i++)
            ans[i]=ans[i-1]+ans[i-2];
        return ans[n];
    }
};