#70-爬楼梯
作者:互联网
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例 1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
- 1 阶 + 1 阶
- 2 阶
示例 2:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
3. 1 阶 + 1 阶 + 1 阶
4. 1 阶 + 2 阶
5. 2 阶 + 1 阶
解:这道题就是典型入门级别的动态规划问题。但是我现在比较模糊,貌似每一个问题如果能用递归去解决的话,都是自上而下的方向进行解题。貌似与动态规划的方向相反了。下面是两者的区别
不同点:
1,分治法往往用到递归计算,自上而下计算,而动态规划则直接自底向上计算
2,分治大的小问题在递归的过程中可能会被反复计算,动态规划中的小问题计算后被存储,下次再碰到时直接调用、
3,分治法的小问题的解只使用一次,动态规划的小问题的解存储以备大问题求解时反复调用
下面再来说一下解题
n=1:只能走一步
n=2:能走两个一步。能走一个两步
n=3:第一步只能是走一步,第二步可以走1个两步,或者 两个一步
当n=4,5,6的时候,可以发现当前步拥有的种类数就是前两步拥有种类数的和,
也就是 f(n) = f(n-1)+f(n-2);
所以我们从第三步开始,因为前两步其实是固定的
再者,我们用一个vector去记录以往的每一步数自身所拥有多少种情况
class Solution {
public:
int climbStairs(int n) {
vector<int> result;
result.push_back(1);
result.push_back(2);
for(int i = 3;i <= n;i++){
result.push_back(result[i-2]+result[i-3]);
}
return result[n-1];
}
};
标签:楼顶,爬楼梯,一步,int,两步,result,70,动态 来源: https://blog.csdn.net/Francis_s/article/details/90610930