zoukankan      html  css  js  c++  java
  • 面试题10- II. 青蛙跳台阶问题

    地址:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/

    <?php
    /**
    一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
    
    答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
    
    示例 1:
    
    输入:n = 2
    输出:2
    示例 2:
    
    输入:n = 7
    输出:21
    提示:
    
    0 <= n <= 100
    
    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
     */
    class Solution {
    
        /**
         * @param Integer $n
         * @return Integer
        设跳上 nn 级台阶有 f(n)f(n) 种跳法。在所有跳法中,青蛙的最后一步只有两种情况: 跳上 11 级或 22 级台阶。
        当为 11 级台阶: 剩 n-1n−1 个台阶,此情况共有 f(n-1)f(n−1) 种跳法;
        当为 22 级台阶: 剩 n-2n−2 个台阶,此情况共有 f(n-2)f(n−2) 种跳法。
        f(n)f(n) 为以上两种情况之和,即 f(n)=f(n-1)+f(n-2)f(n)=f(n−1)+f(n−2) ,以上递推性质为斐波那契数列。本题可转化为 求斐波那契数列第 nn 项的值 ,与 面试题10- I. 斐波那契数列 等价,唯一的不同在于起始数字不同。
        青蛙跳台阶问题: f(0)=1f(0)=1 , f(1)=1f(1)=1 , f(2)=2f(2)=2 ;
        斐波那契数列问题: f(0)=0f(0)=0 , f(1)=1f(1)=1 , f(2)=1f(2)=1 。
         */
        function numWays($n) {
            if($n <=0) return 1;
            if($n <=2) return $n;
            $pre = 1;
            $cur = $res = 2;
            for($i = 3;$i <= $n;++$i){
                $res = ($pre+$cur) %1000000007;
                $pre = $cur;
                $cur = $res;
            }
            return $res;
        }
    }
  • 相关阅读:
    今天地震了(有震感)...
    上班了!
    C++ 中explicit的作用
    DoModal 函数的用法
    [导入]C++ GUi 选择
    [导入]C++资源之不完全导引(完整版)[转]
    [导入]The GUI Toolkit, Framework Page
    [导入]C/C++中调用SQLITE3的基本步骤
    ACM
    牛客NOIP暑期七天营提高组5+普及组5
  • 原文地址:https://www.cnblogs.com/8013-cmf/p/12964468.html
Copyright © 2011-2022 走看看