LeetCode - 70. 爬楼梯(人肉递归、动态规划)2
70 . 爬楼梯
题目:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例 1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
- 1 阶 + 1 阶
- 2 阶
示例 2:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
- 1 阶 + 1 阶 + 1 阶
- 1 阶 + 2 阶
- 2 阶 + 1 阶
递归的思维逻辑:
不要人肉进行递归
找最近重复子问题
数学归纳法的思维
递归模板:
public void recur(int level,int param){//terminatorif(level > MAX_LEVEL){//process resultreturn;}//process current logicprocess(level,param);//drill downrecur(level:level+1,newParam);//restore current status
}
四要素:
recursion terminator 递归终结条件
process logic in current level 处理当前层逻辑
drill down 下探到下一层
reverse the current level status if needed 清理当前层
方法一: 人肉递归(超出时间限制)-- 不推荐
进行了很多重复的计算
class Solution {public int climbStairs(int n) {if(n==1 || n==2){return n;}else{return climbStairs(n-1) + climbStairs(n-2);}}
}
方法二: 避免重复的数,采用记忆递归的方法
public class Solution{public int climbStairs(int n){int memo[] = new int[n + 1];//记录爬到n级台阶的结果return climbStairsMemo(n,memo);}public int climbStairsMemo(int n,int memo[]){//如果爬到n级台阶时,n级台阶已经计算过了,则就直接返回n级台阶的计算结果//保证爬到每级台阶的结果只计算了一次if(memo[n] > 0){return memo[n];}if(n == 1){memo[n] = 1;}else if(n == 2){memo[n] = 2;}else{memo[n] = climbStairsMemo(n - 1, memo) + climbStairsMemo(n - 2,memo);}return memo[n];}
}
方法三:采用动态规划的方法:
只记住两个状态,用滚动数组的方式,
class Solution {public int climbStairs(int n) {int f1 = 1,f2 = 2,f3 = 3;if (n <= 2)return n;for (int i = 3; i < n + 1; i++) {f3 = f1 + f2;f1 = f2;f2 = f3;}return f3;}
}
LeetCode - 70. 爬楼梯(人肉递归、动态规划)2相关推荐
- LeetCode 70爬楼梯71简化路径72编辑距离(dp)
新人公众号(求支持):bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注这个潇洒青年一起飞,回 ...
- Python描述 LeetCode 70. 爬楼梯
Python描述 LeetCode 70. 爬楼梯 大家好,我是亓官劼(qí guān jié ),在[亓官劼]公众号.CSDN.GitHub.B站等平台分享一些技术博文,主要包括前端开发.pyt ...
- LeetCode 70. 爬楼梯 (递归斐波那契 | 动态规划)
70. 爬楼梯 解法1 (暴力递归) 推出递推式子:f(n) = f(n - 1) + f(n - 2) 是一个斐波那契数列,用递归 class Solution {public int climbS ...
- leetcode - 70. 爬楼梯
70. 爬楼梯 -------------------------------------- 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以 ...
- 变形版汉诺塔:LeetCode:70爬楼梯
70. 爬楼梯 题目链接:70:爬楼梯 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1 ...
- Leetcode 70. 爬楼梯 动态规划 c语言
假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数.示例 1: 输入: 2 输出: 2 解释: 有两种 ...
- LeetCode 70. 爬楼梯(动态规划)
题目链接:https://leetcode-cn.com/problems/climbing-stairs/ 之前在递归中讲过这个问题,现在用动态规划求解. 假设你正在爬楼梯.需要 n 阶你才能到达楼 ...
- 84. Leetcode 70. 爬楼梯 (动态规划-基础题)
假设你正在爬楼梯.需要 n 阶你才能到达楼顶.每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢?示例 1:输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶. 1. 1 阶 ...
- LeetCode 70.爬楼梯(动态规划)
题目描述 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解 ...
最新文章
- java NIO详解
- IOS开发笔记2-C语言基础复习
- css js html记录
- 最后一期:如何更新LSTM模型?(附代码)| 博士带你学LSTM
- Electron中实现拖拽文件进div中通过File对象获取文件的路径和内容
- C# Enum,Int,String的互相转换
- python2定点找色_Python实现按键精灵(二)-找图找色
- 什么是人机对话模型?阿里小蜜团队写了1.5万字
- me)不支持html,属于me的vue练习(参考菜鸟教程).html
- EIGRP and the OSPF redistribute
- Building JavaScript Games for Phones Tablets and Desktop(6)- 响应玩家输入
- 学习CSS中的BFC
- SeaJS项目完整实例【转】
- 回复失恋男的来信(转)
- Map与JSON数据之间的互相转化
- matlab lbp特征,lbp特征(lbp纹理特征提取)
- 以下哪一个不属于python语言的特点-智慧树知到《Python程序设计基础》章节测试答案...
- 国际物流、快递、空运、海运、FBA头程、专线分别都有什么不同
- 现有一些开源ESB总线的比较
- C++实现聊天程序(QQ类型)
热门文章
- C++课程设计报告——简易五子棋游戏
- 【UML】例析UML类图的几种关系
- “理想”上市,80后李想,做出2家上市公司:这是我给年轻人的100条成长建议...
- 运算方法和运算器——定点加法减法运算
- 如何系统学习VCU电控开发
- VCS和Verdi联合仿真
- 计算机系统中io设置的作用是,(山东省计算机文化基础选择题.doc
- DHCP 自动分配IP地址 ,IP隧道
- 展望2025:决定未来经济的12大颠覆技术
- OSChina 周五乱弹 —— 子承父业?这几位CTO这么说