题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

思路

  1. 暴力枚举(自顶向下递归):
  2. 若台阶数小于等于0,返回0
  3. 若台阶数为1,返回1;(1)
  4. 若台阶数为2,返回2;(1,1),(2)
  5. 否则,返回F(n-1)+F(n-2);(因为下一步只能是跳1级或者跳2级)
  1. 备忘录算法(自顶向下递归):
  2. 上面的方法包含大量重复计算,这里利用Map来记录计算过的结果,以减少计算次数。
  1. 迭代法(自底向上迭代,也许也算动态规划吧):
  2. 拿两个变量记录前两个结果和一个临时变量保存当前计算结果(也可不用改临时变量)

代码

  1. public class Solution {
  2. public int JumpFloor(int target) {
  3. if(target <= 0 ){
  4. return 0;
  5. }else if(target == 1 || target ==2){
  6. return target;
  7. }else{
  8. return JumpFloor(target-1)+JumpFloor(target-2);
  9. }
  10. }
  11. }
  1. import java.util.Map;
  2. import java.util.HashMap;
  3. public class Solution {
  4. public int JumpFloor(int target) {
  5. Map<Integer, Integer> map = new HashMap<Integer, Integer>();
  6. return JumpFloor(target,map);
  7. }
  8.  
  9. public int JumpFloor(int n,Map<Integer, Integer> map){
  10. if(n <= 0){
  11. return 0;
  12. }else if(n <=2){
  13. return n;
  14. }
  15. if(map.containsKey(n)){
  16. return map.get(n);
  17. }else{
  18. int value = JumpFloor(n-1,map) + JumpFloor(n-2,map);
  19. map.put(n,value);
  20. return value;
  21. }
  22. }
  23. }
  1. public class Solution {
  2. public int JumpFloor(int target) {
  3. if(target <= 0){
  4. return 0;
  5. }else if(target == 1 || target == 2){
  6. return target;
  7. }
  8. int temp=0,pre=1,last=2;
  9. for(int i = 3;i <= target;i++){
  10. temp = pre + last;
  11. pre = last;
  12. last = temp;
  13. }
  14. return last;
  15. }
  16. }

08.青蛙跳台阶 Java的更多相关文章

  1. 【Java】 剑指offer(9) 斐波那契数列及青蛙跳台阶问题

     本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项 ...

  2. 青蛙跳台阶(Fibonacci数列)

    问题 一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级.求该青蛙跳上一个n 级的台阶总共有多少种跳法. 思路 当n=1时,只有一种跳法,及f(1)=1,当n=2时,有两种跳法,及f(2)=2,当n= ...

  3. 剑指 Offer 10- II. 青蛙跳台阶问题

    剑指 Offer 10- II. 青蛙跳台阶问题 Offer 10- II 题目描述: 动态规划方程: 循环求余: 复杂度分析: package com.walegarrett.offer; impo ...

  4. 青蛙跳台阶问题——剑指offer

    题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶,求该青蛙跳上一个n级台阶总共有多少中跳法. http://www.nowcoder.com/books/coding-interviews?pa ...

  5. 【校招面试 之 剑指offer】第10-2题 青蛙跳台阶问题

    题目1:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个n级台阶共有多少种跳法? 题目2:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶...也可以一次跳n级台阶.求该青蛙跳上一个 ...

  6. 面试书上一些题目的整理:O(n)复杂度排序年龄 & 青蛙跳台阶

    可以按照年龄的个数,设置99个桶,然后桶内处理. 青蛙跳台阶,每次1阶或者2阶,就是fib数 如果每次1到n阶,那么归纳法可得,是2^(n-1) 另外1*2 覆盖 2*n个矩阵的问题,仍然是Fib数. ...

  7. Python算法题(一)——青蛙跳台阶

    题目一(青蛙跳台阶): 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 分析: 假设只有一级台阶,则总共只有一种跳法: 假设有两级台阶,则总共有两种跳法: ...

  8. [剑指offer]10.斐波那契数列+青蛙跳台阶问题

    10- I. 斐波那契数列 方法一 Top-down 用递归实现 def fibonacci(n): if n <= 0: return 0 if n == 1: return 1 return ...

  9. 剑指offer-第二章算法之斐波拉契数列(青蛙跳台阶)

    递归与循环 递归:在一个函数的内部调用这个函数. 本质:把一个问题分解为两个,或者多个小问题(多个小问题相互重叠的部分,会存在重复的计算) 优点:简洁,易于实现. 缺点:时间和空间消耗严重,如果递归调 ...

随机推荐

  1. opencv 单目标模板匹配(只适用于模板与目标尺度相同)

    #include <iostream> #include "opencv/cv.h" #include "opencv/cxcore.h" #inc ...

  2. centos7安装配置zabbix监控

    CentOs7安装部署Zabbix3.4 1.关闭selinux和firewall systemctl  stop  firewalld setenforce 1.1检测selinux是否关闭 [ro ...

  3. webpack升级4出现的问题

    webpack3升级到4出现了很多问题,经过验证报错信息如下 1 Module parse failed: Unexpected token (:) You may need an appropria ...

  4. mac 下的操作

    nodejs在Mac下的卸载 在 node 官网上下载的安装包,用安装包安装的node.应该可以用一下命令行卸载: 在终端输入以下命令: sudo rm -rf /usr/local/{bin/{no ...

  5. 最简单webview跳转

    String url = "http://www.qq.com" Uri uri=Uri.parse("http://www.baidu.com"); Inte ...

  6. cubase 反向音频处理

  7. [易学易懂系列|rustlang语言|零基础|快速入门|(26)|实战3:Http服务器(多线程版本)]

    [易学易懂系列|rustlang语言|零基础|快速入门|(26)|实战3:Http服务器(多线程版本)] 项目实战 实战3:Http服务器 我们今天来进一步开发我们的Http服务器,用多线程实现. 我 ...

  8. openssh的服务端配置文件

    一.因为部分配置长时间不使用就忘了,为了方便查阅,我在这里检点写一些比较有用的ssh配置选项. PortListenAddress ip       #监听自己的哪个端口,默认是都监听的,如果指定了I ...

  9. mysql中给查询结果添加序号列

    今天同事给了一个小需求,从一个存有不定数量坐标数据的表(map_trace)中每隔20条取一条.最后写了下面这条SQL: select * from (select @n:=@n+1 as n, a. ...

  10. shell编程初探

    #! /bin/sh #这是神圣丁的第一个shell脚本 name="陈培昌" echo "我就喜欢\"$name\"" echo '我就喜 ...