重读数据结构之爬楼梯问题(动态规划)
leetcode能让人身心愉悦(误),每天抽出一点时间做一道题更是养生之道。今天做一道最经典的爬楼梯问题,即一次可以上一级或者两级台阶,求上n级台阶有多少种组合。这样的问题属于动态规划问题,也就是说,我们只需要关注之前一步的子问题的求解,而子问题的求解又只决定于之前次子问题的解(有点像马尔科夫状态模型)。
既然是只关注之前的子问题,就可以用递归方法来求解了,愉快地写出答案,注意要留心边界条件,这样的极端情况在测试中屡见不鲜。
class Solution {
public:int climbStairs(int n) {if(n == 1)return 1;else if(n == 2)return 2;elsereturn climbStairs(n-2)+climbStairs(n-1);}
};
so easy,斐波那契数列,兔子问题都统统不在话下。。。得意忘形中,发现直接运算超时,仔细一想,函数在执行时需要申请栈来放置自身的变量,而递归更是加深了这个栈的长度,当台阶数过大时内存将会告罄。因此,我们可以做一个小trick,用容器记录下之前的求解,虽然也是递归思想,但只是单纯的数组计算而已。
class Solution {
public:int climbStairs(int n) {if(n == 1)return 1;else if(n == 2)return 2;else{std::vector<int> solution_list_;solution_list_.resize(n);solution_list_[0] = 1;solution_list_[1] = 2;for(int i = 2; i < n; ++i){solution_list_[i] = solution_list_[i-1] + solution_list_[i-2];}return solution_list_[n-1];}}
};
这样就愉快地解决了动态规划中的入门级问题。未完待续~
重读数据结构之爬楼梯问题(动态规划)相关推荐
- LeetCode 70. 爬楼梯(动态规划)
题目链接:https://leetcode-cn.com/problems/climbing-stairs/ 之前在递归中讲过这个问题,现在用动态规划求解. 假设你正在爬楼梯.需要 n 阶你才能到达楼 ...
- LeetCode70. 爬楼梯 [简单]——动态规划
题目描述: 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 我的解题: 1.我的第一反应居然是做 ...
- 746. 使用最小花费爬楼梯 golang 动态规划
746. 使用最小花费爬楼梯 746. 使用最小花费爬楼梯 数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 costi. 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以 ...
- 学渣的刷题之旅 leetcode刷题 70.爬楼梯(动态规划)
假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 输入: 2 输出: 2 解释: 有两种方法可以爬 ...
- 动态规划算法-01爬楼梯问题
爬楼梯问题 动态规划 动态规划算法将带求解问题拆分成一系列相互交叠的子问题,通过递推关系定义各子问题的求解策略,并随时记录子问题的解,最终获得原始问题的解,避免了对交叠子问题的重复求解. 在动态规划算 ...
- 算法题目——使用最小花费爬楼梯(动态规划)
题目链接:746.使用最小花费爬楼梯 方法:动态规划 假设数组cost的长度为n,则n个阶梯分别对应下标0到n- 1,楼层顶部对应下标n,问题等价于计算达到下标n的最小花费.可以通过动态规划求解. 创 ...
- 【力扣动态规划基础专题】:509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 62. 不同路径 63. 不同路径 II 343. 整数拆分 96. 不同的二叉搜索树
/** 动态规划专题:这是最简单的并且已经给出了转移方程,平时我们用dp[]数组来表示转移方程转移方程: dp[n] = dp[n-1]+dp[n-2]初始值:dp[0] = 0 , dp[1] = ...
- Leetcode 70. 爬楼梯 动态规划 c语言
假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数.示例 1: 输入: 2 输出: 2 解释: 有两种 ...
- LeetCode-基础动态规划-70. 爬楼梯
描述 70.爬楼梯 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出 ...
最新文章
- android简单分享----文字加图片
- Xamarin Android提示内存溢出错误
- 在 2016 年学 JavaScript 是一种什么样的体验?
- 多用户使用一台计算机可设置,多用户使用一台计算机的情况经常出现,这时可设置()...
- 高维数据使用npy格式保存
- Windows Server 2003服务器安装前设置
- 【报告分享】B2B内容营销指南—制定有效内容策略-领英.pdf(附下载链接)
- MAC Home-brew 和 Home-brew Cask
- 阿里云产品经理吴华剑:SLS 的产品功能与发展历程
- oracle rman异地备份,通过RMAN磁盘备份进行异地恢复
- win10/win11掉驱动问题
- 麦咖啡的设置,很长,如果你想百毒不侵的话。。
- iPXE部署Ubuntu无盘系统
- matlab ascii显示,matlab ASCII 格式导入
- 概率 (菜鸡 dalao轻喷
- A002-185-1203
- 双屏显示 鼠标不能从左侧滑入右侧竖屏
- 电脑新加内存条后 游戏崩溃 浏览器卡死 电脑蓝屏
- 【具体实现过程】百度地图POI区域的边界经纬度坐标数据采集
- python Opencv和pyautogui实现自动识图点击