博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 70. 爬楼梯(动态规划)
阅读量:2009 次
发布时间:2019-04-28

本文共 897 字,大约阅读时间需要 2 分钟。

题目链接:

之前在中讲过这个问题,现在用动态规划求解。

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

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。

用dp[i] 表示到达第i个台阶的走法,那么到达第n个台阶的这个状态的走法,只跟n-1和n-2的状态有关(走1步或2步到n)

状态方程为 dp[n] = dp[n-1] + dp[n-2]
在这里插入图片描述

class Solution {
public: int climbStairs(int n) {
if(n == 1) return 1; if(n == 2) return 2; int dp[n]; dp[0] = 1; dp[1] = 2; for(int i = 2; i < n; ++i) {
dp[i] = dp[i-1] + dp[i-2]; } return dp[n-1]; }};

对上面程序进行状态压缩,前面用不到的状态不保留

在这里插入图片描述

class Solution {
public: int climbStairs(int n) {
if(n == 1) return 1; if(n == 2) return 2; int dp_i, dp_i_2 = 1, dp_i_1 = 2; for(int i = 2; i < n; ++i) {
dp_i = dp_i_1 + dp_i_2; dp_i_2 = dp_i_1; dp_i_1 = dp_i; } return dp_i; }};

转载地址:http://fqetf.baihongyu.com/

你可能感兴趣的文章
SERVICE_UNAVAILABLE/1/state not recovered / initialized
查看>>
OV5620的视频驱动
查看>>
C++中两个类交叉定义或递归定义的解决办法
查看>>
记一次Hive 行转列 引起的GC overhead limit exceeded
查看>>
OpenGL ES八 - 交叉存取顶点数据
查看>>
crontab定时任务写法
查看>>
nginx: [emerg] unknown directive "if($remote_addr" in /usr/local/tools/nginx/conf/nginx.conf:57
查看>>
module pip has no attribute main问题解决
查看>>
LeetCode 134.Gas Station (加油站)
查看>>
Python之命名元组 (namedtuple)
查看>>
使用libpcap过滤arp
查看>>
[转帖]Robots.txt指南
查看>>
正则表达式简介(微软)--6.优先权顺序
查看>>
多用户与多租户的区别
查看>>
Python自动化运维 - day14 - JavaScript基础
查看>>
oracle保存小数点前为"0"的问题
查看>>
linux sar 命令详解
查看>>
ipvsadm 安装配置
查看>>
Linux shell脚本的字符串截取
查看>>
数据库复习(4)
查看>>