[leetcode]70. Climbing Stairs
Analysis
刷题and学英语—— [ 坚持坚持]
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?
这道题是一个动态规划的问题,不过这个DP比较简单。上楼的时候可以一次爬一个台阶,也可以一次爬两个台阶,因此我们最开始有两个选择即爬一个和爬两个:如果爬一个,那么剩下n-1个台阶;如果爬两个,那么还剩下n-2个台阶。因此我们有:
cnt[n] = cnt[n-1]+cnt[n-2]
同时,cnt[0]=[1], cnt[1]=2;
还有就是这道题递归会超时哦~所以还是采用非递归的方法比较好~
Implement
class Solution {
public:
int climbStairs(int n) {
if(n <= 0)
return 0;
if(n == 1)
return 1;
if(n == 2)
return 2;
int *cnt = new int[n];
cnt[0] = 1;
cnt[1] = 2;
for(int i=2; i<n; i++)
cnt[i] = cnt[i-1]+cnt[i-2];
int res = cnt[n-1];
return res;
}
};