70 . 爬楼梯

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

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

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

示例 1:

输入: 2
输出: 2

解释: 有两种方法可以爬到楼顶。

  1. 1 阶 + 1 阶
  2. 2 阶

示例 2:

输入: 3
输出: 3

解释: 有三种方法可以爬到楼顶。

  1. 1 阶 + 1 阶 + 1 阶
  2. 1 阶 + 2 阶
  3. 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
}

四要素:

  1. recursion terminator 递归终结条件

  2. process logic in current level 处理当前层逻辑

  3. drill down 下探到下一层

  4. 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相关推荐

  1. LeetCode 70爬楼梯71简化路径72编辑距离(dp)

    新人公众号(求支持):bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注这个潇洒青年一起飞,回 ...

  2. Python描述 LeetCode 70. 爬楼梯

    Python描述 LeetCode 70. 爬楼梯   大家好,我是亓官劼(qí guān jié ),在[亓官劼]公众号.CSDN.GitHub.B站等平台分享一些技术博文,主要包括前端开发.pyt ...

  3. LeetCode 70. 爬楼梯 (递归斐波那契 | 动态规划)

    70. 爬楼梯 解法1 (暴力递归) 推出递推式子:f(n) = f(n - 1) + f(n - 2) 是一个斐波那契数列,用递归 class Solution {public int climbS ...

  4. leetcode - 70. 爬楼梯

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

  5. 变形版汉诺塔:LeetCode:70爬楼梯

    70. 爬楼梯 题目链接:70:爬楼梯 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1 ...

  6. Leetcode 70. 爬楼梯 动态规划 c语言

    假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数.示例 1: 输入: 2 输出: 2 解释: 有两种 ...

  7. LeetCode 70. 爬楼梯(动态规划)

    题目链接:https://leetcode-cn.com/problems/climbing-stairs/ 之前在递归中讲过这个问题,现在用动态规划求解. 假设你正在爬楼梯.需要 n 阶你才能到达楼 ...

  8. 84. Leetcode 70. 爬楼梯 (动态规划-基础题)

    假设你正在爬楼梯.需要 n 阶你才能到达楼顶.每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢?示例 1:输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶. 1. 1 阶 ...

  9. LeetCode 70.爬楼梯(动态规划)

    题目描述 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解 ...

最新文章

  1. java NIO详解
  2. IOS开发笔记2-C语言基础复习
  3. css js html记录
  4. 最后一期:如何更新LSTM模型?(附代码)| 博士带你学LSTM
  5. Electron中实现拖拽文件进div中通过File对象获取文件的路径和内容
  6. C# Enum,Int,String的互相转换
  7. python2定点找色_Python实现按键精灵(二)-找图找色
  8. 什么是人机对话模型?阿里小蜜团队写了1.5万字
  9. me)不支持html,属于me的vue练习(参考菜鸟教程).html
  10. EIGRP and the OSPF redistribute
  11. Building JavaScript Games for Phones Tablets and Desktop(6)- 响应玩家输入
  12. 学习CSS中的BFC
  13. SeaJS项目完整实例【转】
  14. 回复失恋男的来信(转)
  15. Map与JSON数据之间的互相转化
  16. matlab lbp特征,lbp特征(lbp纹理特征提取)
  17. 以下哪一个不属于python语言的特点-智慧树知到《Python程序设计基础》章节测试答案...
  18. 国际物流、快递、空运、海运、FBA头程、专线分别都有什么不同
  19. 现有一些开源ESB总线的比较
  20. C++实现聊天程序(QQ类型)

热门文章

  1. C++课程设计报告——简易五子棋游戏
  2. 【UML】例析UML类图的几种关系
  3. “理想”上市,80后李想,做出2家上市公司:这是我给年轻人的100条成长建议...
  4. 运算方法和运算器——定点加法减法运算
  5. 如何系统学习VCU电控开发
  6. VCS和Verdi联合仿真
  7. 计算机系统中io设置的作用是,(山东省计算机文化基础选择题.doc
  8. DHCP 自动分配IP地址 ,IP隧道
  9. 展望2025:决定未来经济的12大颠覆技术
  10. OSChina 周五乱弹 —— 子承父业?这几位CTO这么说