题目分析:

假设走n级阶梯的计算函数为f(n),走n级阶梯,第一步两种走法,走1级或走2级;

两种走法相应地剩下一定数量的阶梯,他们对应的走法分别是f(n-1), f(n-2);

f(n)=f(n-1)+f(n-2),得到递推公式;

初始状态1级,2级阶梯对应的走法分别是1和2,即f(1)=1, f(2)=2;

结合递推公式可计算得到f(3), f(4), f(5)...f(n)...任意数量阶梯的走法。

代码思路:

1.递归算法

*直接调用递归方法

class Solution{
public int climbStairs(int n){
if(n==1)return 1;//初始状态直接输出
if(n==2)return 2;
return climbStairs(n-1)+climbStairs(n-2);//n>3调用自己递推计算
}
}

优点:代码书写简单

缺:假设求f(n),f(n)=f(n-1)+f(n-2),f(n-1)=f(n-2)+f(n-3),f(n-2)=f(n-3)+f(n-4),f(n-3)=...,f(n-4)=...,...=f(2)+f(1),每个值都用递归单独计算一次,产生了非常多的重复计算,时间复杂度为O(n^2),效率比较低,因此考虑使用*HashMap。

定义一个HashMap,每次计算前先从Hash表中获取,获取不到再用递归算法求解,求解出来的值放入HashMap中方便下次使用,时间复杂度是O(m),属于线性时间复杂度。

代码:

class Solution{private Map<Integer,Integer> storeMap=new HashMap<>();public int climbStairs(int n){if(n==1)return 1;if(n==2)return 2;if(null!=storeMap.get(n))//括号应为英文括号return storeMap.get(n);else{int result=climbStairs(n-1)+climbStairs(n-2);storeMap.put(n,result);//HashMap的参数成对出现return result;}}}

总结:

分3种情况

n为初始状态,直接输出走法数;

n在Hash表中,获取走法数然后输出;

n不在Hash表中,递归计算得到走法数,存入Hash表,返回值;

2.循环算法

递归算法的思路是从最终应求结果,往回考虑n-1项,最终追溯到f(1)和f(2),再自下而上,递推得到最终结果。循环算法自下而上计算每种情况的走法数,直到阶梯数量与题目要求的相同,即得到答案。计算n级阶梯的方法数f(n)总是会用到f(n-1)和f(n-2),因此,在由下而上的计算过程中,要用2个参数,实时记录这两个值。

代码:

class Solution{
public int climbStairs(int n){
if(n==1)return 1;//标点用英文
if(n==2)return 2;
int pre=2;
int prePre=1;
for(int i=3;;i++){//i为阶梯数/先计算还是先判断,先计算,因为不管阶梯数是多少,后面要么输出,int result=pre+prePre; //要么作为pre/prePre,都会用到,判断不是判断是否计算,而是判断是否输出
if(n==i)return result;//先判断再赋值,如果是要求的阶梯数,就不必再计算下个计算目标的递推数
prePre=pre;
pre=result;
}
}
}

*斐波那契数列解法同理

声明:内容学习自b站视频"【比刷剧还爽!】13天高效刷题 | 哔哩最强LeetCode算法刷题...",感谢up,获益良多。文字全部是个人学习总结,代码为个人默打,如有侵权,请联系后处理。

解题思路LeetCode-70相关推荐

  1. 解题思路-LeetCode第713题:乘积小于K的子数组

    解题思路-LeetCode第713题:乘积小于K的子数组 题目描述: 给定一个正整数数组 nums. 找出该数组内乘积小于 k 的连续的子数组的个数. 示例 1: 输入: nums = [10,5,2 ...

  2. Leetcode 138. 复制带随机指针的链表 解题思路及C++实现

    解题思路: 主要包括三步. 第一步是遍历一次链表,复制其每一个节点,并将所复制的节点接在其后. 第二步是遍历一次链表,解决拷贝节点的random指针的指向. 第三步是从这个大链表中,拆出原有链表和拷贝 ...

  3. Leetcode 211. 添加与搜索单词 - 数据结构设计 解题思路及C++实现

    解题思路: 用字典树来作为存储的数据结构. 新增单词的时候,就使用字典树插入新单词的方法,与LeetCode 208 题一样. 在查找某一个字典树时,使用深度优先搜索即可. class WordDic ...

  4. Leetcode 106. 从中序与后序遍历序列构造二叉树 解题思路及C++实现

    解题思路: 思路和Leetcode 105题相同.区别在于,在这一题中,后序遍历的最后一个值为根节点. 然后仍然是找到根节点后,划分左右子树,递归构建. /*** Definition for a b ...

  5. Leetcode 313. 超级丑数 解题思路及C++实现

    解题思路: 与Leetcode 264. 丑数 II的解题思路一样,均使用最小堆来存储丑数,第i次更新最小堆时,得到第i大的丑数. 可结合Leetcode 264. 丑数 II的解题思路理解:http ...

  6. LeetCode 309: 一个很清晰的DP解题思路

    问题来源 题目来源链接见下方: https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/descript ...

  7. leetcode 1737 解题思路及注释code 贪心

    备忘录 最近在刷leetcode,好不容易搞懂一道题,还是希望记录下来,以防之后忘记,也希望可以分享给大家思路. 题目要求 给你两个字符串 a 和 b ,二者均由小写字母组成.一步操作中,你可以将 a ...

  8. 路径字符串生成树形结构的思路_资源推荐!顶级程序员必刷宝典!LeetCode中文解题思路重磅问世!...

    今天推荐一个Github资源,该主题是中文LeetCode解题思路,让你完美应对公司笔试! LeetCode简介 LeetCode收录了许多互联网公司的算法题目,被称为刷题神器. 资源内容 第一个部分 ...

  9. LeetCode 272 Closest Binary Tree Traversal II 解题思路

    原题网址:https://leetcode.com/problems... Given a non-empty binary search tree and a target value, find  ...

  10. LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之一:解题思路

    笔者在完成LeetCode第三题(Longest Substring Without Repeating Characters)时,经历了设计.实现.优化三个阶段,于是通过这个三部曲系列,将当初的整个 ...

最新文章

  1. mysql ibd文件还原_Mysql 通过ibd文件恢复数据
  2. 如何停止一个正在运行的线程?
  3. 注册.NET Framework
  4. 【萌味】小夕说,不了解动态空间增长的程序喵都是假喵(中)
  5. 大同语网站页面资料汇总编书(PDF)
  6. select、poll与epoll的优缺点
  7. JAVA项目之图书管理系统
  8. 开源磁力搜索爬虫dhtspider原理解析
  9. 组件用.vue还是.js_适用于qart.js的vue 2.x的组件
  10. 优锘科技:CMDB的本质以及它能解决什么问题?
  11. 使用阿里云的ip地址查询服务-购买ip地址查询服务
  12. Micro-personnel部署
  13. java ai寻路_AI自动寻路
  14. matlab生成的数值为inf,计算值时为Nan / inf
  15. python爬新闻并保存到csv_python爬取信息并保存至csv
  16. 黄柳青:中国软件的致命缺陷是什么!
  17. 坚持自主可控,长安链ChainMaker全面拥抱国密的技术实践
  18. sprintf 用法(sprintf_s)
  19. WebService 及java网络编程等基础概念(一)
  20. 如何使用python AI快速比对两张人脸图像?

热门文章

  1. 年薪20W的云计算人才,是如何炼成的?
  2. 诛天者 pat basic 练习五十三 住房空置率
  3. 绁炵粡缃戠粶妯″瀷鍒嗘瀽鎯呮櫙鍒嗘瀽
  4. Android 仿微信右上角点击加号弹出菜单
  5. 数据库练习【NBA球员数据库设计】
  6. 运行维护-PC与笔记本性能测试
  7. Python绘图——漂亮的玫瑰(源代码)
  8. 计算机操作系统思维导图_计算机网络思维导图(零基础--思维导图详细版本及知识点)...
  9. UI自动化中获取登录验证码
  10. 领峰:投资者要掌握什么才能做好黄金期货走势分析