首页 > 编程语言 > 详细

【数据结构与算法】动态规划——爬楼梯

时间:2020-03-19 23:50:48      阅读:107      评论:0      收藏:0      [点我收藏+]

爬楼梯

LeetCode:爬楼梯

题目描述:

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

示例:

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1.  1 阶 + 1 阶 + 1 阶
2.  1 阶 + 2 阶
3.  2 阶 + 1 阶

思想:

到达某一个台阶方法数,等于抵达前两个台阶的方法数之和。

代码:

斐波那契数列法

class Solution {
    public int climbStairs(int n) {
        int r1=1,r2=2,res=n;//r1和r2分别表示当前位置的前两个数
        for(int i = 3;i<=n;++i){
            res = r1 + r2;
            r1 = r2;
            r2 = res;
        }
        return res;
    }
}

自底向上动态规划法

class Solution {
    public int climbStairs(int n) {
        int[] dp = new int[n+1];//存储每一个台阶的方法数
        dp[0]=1;//0号位是多余的,故数组要分配n+1项
        dp[1]=1;
        for(int i = 2;i<=n;++i){
            dp[i] = dp[i-1] + dp[i-2];
        }
        return dp[n];
    }
}

【数据结构与算法】动态规划——爬楼梯

原文:https://www.cnblogs.com/buptleida/p/12528208.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!