zoukankan      html  css  js  c++  java
  • php实现变态跳台阶(记忆化递归)

    php实现变态跳台阶(记忆化递归)

    一、总结

    1、本题思路(分类讨论思路,注意初始值和边界值):第一步如果1,那剩下的就是jumpFloorII($number-1)(下面jumpFloorII以j表示),第一步如果2,那剩下的就是j($number-2),...,以此类推

    所以j(n)=j(n-1)+j(n-2)+...+j(0),其实j(n)就是2的n次方

    二、php实现变态跳台阶

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

    三、代码

    牛客网ac代码一:

     1 <?php
     2 
     3 $arr = array(1,1,2,4);//记忆化递归数组  1、$arr[0]=1而不是0
     4 for($i=4;$i<500;$i++) $arr[$i]=-1;
     5 function jumpFloorII($number)
     6 {
     7     global $arr;
     8     if($arr[$number]!=-1) return $arr[$number]; //2、这里的$arr忘记接[$number]
     9     $ans=0;
    10     for($i=1;$i<=$number;$i++){
    11         $arr[$number-$i]=$arr[$number-$i]!=-1?$arr[$number-$i]:jumpFloorII($number-$i); //3、这里的变量i漏掉了$符号
    12         $ans+=$arr[$number-$i];
    13     }
    14     return $arr[$number]=$ans;
    15 }

    代码二:

     1 //变态跳台阶
     2 private $arr = array();//记忆化递归数组
     3 public function jumpFloorII($number)
     4 {
     5     global $arr;
     6     if($arr[$number]!=-1) return $arr[$number];
     7     $ans=0;
     8     for($i=1;$i<=$number;$i++){
     9         $arr[$number-$i]=$arr[$number-$i]!=-1?$arr[$number-$i]:$this->jumpFloorII($number-$i);
    10         $ans+=$arr[$number-$i];
    11     }
    12     return $arr[$number]=$ans;
    13 }
    14 public function jumpFloorIIDemo(){
    15     global $arr;
    16     for($i=0;$i<500;$i++) $arr[$i]=-1;
    17     $arr[0]=1;
    18     $arr[1]=1;
    19     $arr[2]=2;
    20     $arr[3]=4;
    21     echo($this->jumpFloorII(30));
    22     dump($arr);die;
    23 }

  • 相关阅读:
    Pytorch手写线性回归
    numpy+sklearn 手动实现逻辑回归【Python】
    如何用TensorFlow实现线性回归
    进程、线程和携程的通俗解释【刘新宇Python】
    即时通信WebSocket 和Socket.IO
    gRPC【RPC自定义http2.0协议传输】
    Django中MySQL事务的使用
    模拟电磁曲射炮_H题 方案分析【2019年电赛】【刘新宇qq522414928】
    Gitflow工作流
    雪花算法【分布式ID问题】【刘新宇】
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9036312.html
Copyright © 2011-2022 走看看