外国好的设计网站大全,国内网站制作特点,百度竞价推广登录入口,个人宽带备案网站#x1f604;#x1f60a;#x1f606;#x1f603;#x1f604;#x1f60a;#x1f606;#x1f603;
开始cpp刷题之旅。
依旧是追求耗时0s的一天。 70. 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可…
开始cpp刷题之旅。
依旧是追求耗时0s的一天。 70. 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢
示例 1
输入n 2 输出2 解释有两种方法可以爬到楼顶。
1 阶 1 阶2 阶 示例 2
输入n 3 输出3 解释有三种方法可以爬到楼顶。 3. 1 阶 1 阶 1 阶 4. 1 阶 2 阶 5. 2 阶 1 阶
解法这题刚开始比较难理解但是理解后回头看还是比较简单的。
注意这个条件 每次你可以爬 1 或 2 个台阶也就是说只能前进一个或两个楼梯。
我们可以用高中时期的数学归纳法来验证这题当n1和2时结果为自身n3时结果为3也就是12。
当我们来到nn时我们有几种可能从前面迈到这个n阶呢答案是两种因为我只可以爬一或两个台阶。
当我爬1个台阶我是从n-1上迈上来的当n2时我是从n-2上迈上来的。
也就是说我到n个台阶的可能性 到n-1个台阶可能性到n-2个台阶的可能性。
看到这个有没有想到斐波那契数列。
fnf(n-1)f(n-2);
我们只需要利用这个公式就可以得到解法了。
看代码
class Solution {
public:int climbStairs(int n) {vectorint dp(n1,0); //定义n1个是考虑当n1时的情况。dp[0]1;dp[1]2;for(int i2;in-1;i){dp[i]dp[i-1]dp[i-2];}return dp[n-1];}
};看一下提交记录 OKperfect。