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.
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
这道题自己没做出来,后来看别人的讲解发现是动态规划的题。
题目的要求就是给一个数字n,可以走1步也可以走2步,问有几种方法可以走到n。
思路:
n==1 返回1
n==2返回2
n>2时:r[i] = r[i-1]+r[i-2]
思路:因为一次只能迈一个台阶或迈两个台阶,所以当前台阶可能是由它上一个台阶迈过来或者是由它上上个台阶迈过来。
所以可得到递推公式:r[i] = r[i-1]+r[i-2]
例如:n==3;
r[3] = r[2]+r[1];//到第3个台阶,可以从第2个台阶迈过去,也可以从第1个台阶迈过去。因为n==2的值和n==1的值已知,所以可直接求得结果
class Solution {
public:
int climbStairs(int n) {
int i;
int r[n+1];
if(n==1)
return 1;
if(n==2)
return 2;
if(n>2){
r[1]=1;
r[2]=2;
for(i=3; i<=n; i++){
r[i] = r[i-1] + r[i-2];
}
return r[n];
}
}
};