• 009 变态跳台阶


    1.题目

      一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

    2.思路

      这里主要有两种思路,我感觉第二种更好理解一点。

      1.

      假设:f(n)表示:n个台阶第一次1,2,...n阶的跳法数;

      若第一次跳了1阶,则还剩n-1阶,
      假设:f(n-1)表示:n-1个台阶第一次1,2,...n-1阶的跳法数;
      若第一次跳了2阶,则还剩n-2阶,
      假设:f(n-2)表示:n-1个台阶第一次1,2,...n-2阶的跳法数;
         // ...
      把所以可能的情况(第一次可能跳1,2,...,n阶)加起来:
      可以求出:f(n) = f(n-1) + f(n-2) + ... + f(1)
      递归:f(n-1) = f(n-2) + ... + f(1)
      可以求出:f(n) = 2*f(n-1) 
      2.
      每个台阶可以跳或者不跳
     
    3.程序
     1 package first;
     2 
     3 public class JumpFloorII {
     4     public static void main(String[] args){
     5         //
     6         int a=JumpFloorII(3);
     7         System.out.println(a);
     8         //
     9         int b=JumpFloorII2(3);
    10         System.out.println(b);
    11         //
    12         int c=JumpFloorII3(3);
    13         System.out.println(c);
    14         //
    15         int d=JumpFloorII4(3);
    16         System.out.println(d);
    17     }
    18 
    19     public static  int JumpFloorII(int target) {
    20         if(target<=0)
    21             return 0;
    22         return 1<<(target-1);
    23     }
    24 
    25     public static int JumpFloorII2(int target){
    26         if(target<=0){
    27             return 0;
    28         }else if(target==1){
    29             return 1;
    30         }else
    31             return 2*JumpFloorII2(target-1);
    32     }
    33 
    34     public static int JumpFloorII3(int target){
    35         if (target <= 0) return 0;
    36         return (int) Math.pow(2, target - 1);
    37     }
    38 
    39     public static int JumpFloorII4(int target){
    40         if (target==0)
    41             return 0;
    42         if (target==1)
    43             return 1;
    44         int a=1;   //第一次的方法
    45         int b=2;   //第二次的方法
    46         for(int i=2;i<=target;i++){
    47             b=2*a;  //2*上一次的方法
    48             a=b;    //将值传递,然后继续下一步计算
    49         }
    50         return b;
    51     }
    52 
    53 
    54 }
  • 相关阅读:
    python基础之集合
    python中关于赋值,深浅拷贝
    python小数据池
    python关于解构的例子
    test
    python字典的增,删,改,查
    python中元组常识,以及for 与 range 的用法!
    protobuf.js在长连接中前后台的交互使用方式
    vue-cli的浏览器兼容babel的配置
    前端处理在web打开app功能,有app就打开,没app就提示需要下载直接跳到下载app的页面
  • 原文地址:https://www.cnblogs.com/juncaoit/p/10418175.html
Copyright © 2020-2023  润新知