动态规划——爬楼梯题解

题目:

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例 1: 输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。

1. 1 阶 + 1 阶

2. 2 阶

示例 2: 输入:n = 3 输出:3 解释:有三种方法可以爬到楼顶。

1. 1 阶 + 1 阶 + 1 阶

2. 1 阶 + 2 阶

3. 2 阶 + 1 阶

思路

直接类比斐波那契数列的解题思路--递归思想

解题方法

爬到第 n 阶台阶的方法数等于爬到第 n-1 阶台阶的方法数与爬到第 n-2 阶台阶的方法数之和。因为我们每次只能爬 1 阶或 2 阶,所以从 n-1 阶再爬 1 阶,或者从 n-2 阶再爬 2 阶是唯一的方法。
设 f(n) 表示爬到第 n 阶的方法数,那么有递推公式:
f(n)=f(n−1)+f(n−2) 则其初始条件是:
f(1)=1;f(2)=2
(这一点有别于斐波那契数列)
class Solution {
public:
    int climbStairs(int n) {
        if(n<=0){return 0;}
        if(n==1){return 1;}
        if(n==2){return 2;}

        int first = 1;
        int second = 2;
        int result = 0;

        for(int i = 3;i <= n; ++i){
            result = first+second;
            first=second;
            second=result;
        }
        return result;

    }
};

 

复杂度

时间复杂度:

O(n)

空间复杂度:

 O(1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值