08.青蛙跳台阶 Java
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路
暴力枚举(自顶向下递归):
若台阶数小于等于0,返回0;
若台阶数为1,返回1;(1)
若台阶数为2,返回2;(1,1),(2)
否则,返回F(n-1)+F(n-2);(因为下一步只能是跳1级或者跳2级)
备忘录算法(自顶向下递归):
上面的方法包含大量重复计算,这里利用Map来记录计算过的结果,以减少计算次数。
迭代法(自底向上迭代,也许也算动态规划吧):
拿两个变量记录前两个结果和一个临时变量保存当前计算结果(也可不用改临时变量)
代码
- public class Solution {
- public int JumpFloor(int target) {
- if(target <= 0 ){
- return 0;
- }else if(target == 1 || target ==2){
- return target;
- }else{
- return JumpFloor(target-1)+JumpFloor(target-2);
- }
- }
- }
- import java.util.Map;
- import java.util.HashMap;
- public class Solution {
- public int JumpFloor(int target) {
- Map<Integer, Integer> map = new HashMap<Integer, Integer>();
- return JumpFloor(target,map);
- }
- public int JumpFloor(int n,Map<Integer, Integer> map){
- if(n <= 0){
- return 0;
- }else if(n <=2){
- return n;
- }
- if(map.containsKey(n)){
- return map.get(n);
- }else{
- int value = JumpFloor(n-1,map) + JumpFloor(n-2,map);
- map.put(n,value);
- return value;
- }
- }
- }
- public class Solution {
- public int JumpFloor(int target) {
- if(target <= 0){
- return 0;
- }else if(target == 1 || target == 2){
- return target;
- }
- int temp=0,pre=1,last=2;
- for(int i = 3;i <= target;i++){
- temp = pre + last;
- pre = last;
- last = temp;
- }
- return last;
- }
- }
08.青蛙跳台阶 Java的更多相关文章
- 【Java】 剑指offer(9) 斐波那契数列及青蛙跳台阶问题
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项 ...
- 青蛙跳台阶(Fibonacci数列)
问题 一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级.求该青蛙跳上一个n 级的台阶总共有多少种跳法. 思路 当n=1时,只有一种跳法,及f(1)=1,当n=2时,有两种跳法,及f(2)=2,当n= ...
- 剑指 Offer 10- II. 青蛙跳台阶问题
剑指 Offer 10- II. 青蛙跳台阶问题 Offer 10- II 题目描述: 动态规划方程: 循环求余: 复杂度分析: package com.walegarrett.offer; impo ...
- 青蛙跳台阶问题——剑指offer
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶,求该青蛙跳上一个n级台阶总共有多少中跳法. http://www.nowcoder.com/books/coding-interviews?pa ...
- 【校招面试 之 剑指offer】第10-2题 青蛙跳台阶问题
题目1:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个n级台阶共有多少种跳法? 题目2:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶...也可以一次跳n级台阶.求该青蛙跳上一个 ...
- 面试书上一些题目的整理:O(n)复杂度排序年龄 & 青蛙跳台阶
可以按照年龄的个数,设置99个桶,然后桶内处理. 青蛙跳台阶,每次1阶或者2阶,就是fib数 如果每次1到n阶,那么归纳法可得,是2^(n-1) 另外1*2 覆盖 2*n个矩阵的问题,仍然是Fib数. ...
- Python算法题(一)——青蛙跳台阶
题目一(青蛙跳台阶): 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 分析: 假设只有一级台阶,则总共只有一种跳法: 假设有两级台阶,则总共有两种跳法: ...
- [剑指offer]10.斐波那契数列+青蛙跳台阶问题
10- I. 斐波那契数列 方法一 Top-down 用递归实现 def fibonacci(n): if n <= 0: return 0 if n == 1: return 1 return ...
- 剑指offer-第二章算法之斐波拉契数列(青蛙跳台阶)
递归与循环 递归:在一个函数的内部调用这个函数. 本质:把一个问题分解为两个,或者多个小问题(多个小问题相互重叠的部分,会存在重复的计算) 优点:简洁,易于实现. 缺点:时间和空间消耗严重,如果递归调 ...
随机推荐
- 你不知道的css各类布局(四)之响应式布局
响应式布局 概念 响应式布局指的是同一页面在不同屏幕尺寸下有不同的布局 布局特点 响应式设计的目标是确保一个页面在所有终端上(各种尺寸的PC.手机.手表.冰箱的Web浏览器等等)都能显示出令人满意的效 ...
- RAII惯用法:C++资源管理的利器(转)
RAII惯用法:C++资源管理的利器 RAII是指C++语言中的一个惯用法(idiom),它是“Resource Acquisition Is Initialization”的首字母缩写.中文可将其翻 ...
- vue入门:(底层渲染实现render函数、实例生命周期)
vue实例渲染的底层实现 vue实例生命周期 一.vue实例渲染的底层实现 1.1实例挂载 在vue中实例挂载有两种方法:第一种在实例化vue时以el属性实现,第二种是通过vue.$mount()方法 ...
- vue项目 时间戳转 格式
项目用了 element UI的日期插件,修改时 时间回显不了,打印出来是换行了,因此要转换 changeTime(value){ let date = new Date(value); let y ...
- mysql计算QPS
首先连接上mysql: $ mysql -h .x -P3306 -uusername -p123456 进入Mysql之后,查询general_log: mysql> SHOW VARIABL ...
- Python之if-else语句
if--else语句if username == 'admin' and password == '123456': print('身份验证成功!') else: print('身份验证失败!')if ...
- 解决办法:Message: 对实体 "useUnicode" 的引用必须以 ';' 分隔符结尾
Hibernate 5.3.1 INFO: HHH000206: hibernate.properties not foundException in thread "main" ...
- ln建立时符号链接时出现同名文件或目录
给ln命令加上-s选项,则建立软链接. 格式:ln -s [真正的文件或者目录] [链接名] [链接名]可以是任何一个文件名或者目录名,并且允许它与原文件不在同一个文件系统中. 如果[链接名]是一 ...
- 关于SYSLINUX的一些重要描述摘录
以下资源都来自官方文档,原文摘录 The SYSLINUX suite contains the following boot loaders ("derivatives"), f ...
- 【异常】postman能够请求成功获取到参数,前端请求的却请求不到
1 前端联调的时候,反馈自己的参数没有生效,无论传递任何参数都是一样的结果 盯了一下日志发现 postman请求的是 :{"getParameter":{"provi ...