• 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 }

  • 相关阅读:
    java 将动作和名字绑定
    java 切换不同的显示风格
    java 背景颜色更改
    java 图像显示
    java 字符串
    java 2D 绘图
    java jFrame
    java bitset and C++ bitset
    踏得网
    纯CSS画的基本图形(矩形、圆形、三角形、多边形、爱心、八卦等)
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9036312.html
Copyright © 2020-2023  润新知