美文网首页
[剑指-08](php&python):跳台阶

[剑指-08](php&python):跳台阶

作者: myFamily329 | 来源:发表于2019-01-14 19:54 被阅读0次
    说明:记录刷剑指offer,使用php与python两种语言,对解题思路以及涉及到的基本语法以及知识点做学习记录。其中对于每道题目进行粗略的分类。
    题目来源
    题目描述

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

    解题思路

    对于本题,每次只有1阶,2阶两种跳法

    • 假设第一次跳的是一阶,则剩余的(n-1)阶,有f(n-1)种跳法
    • 假设第一次跳的是二阶,则剩余的(n-2)阶,有f(n-2)种跳法
    • 则通过1和2可得,有n阶跳法有: f(n) = f(n -1) + f(n -2) 种跳法
    • 通过实际情况,只有一阶的时候 f(1) = 1 ,只有两阶的时候可以有 f(2) = 2
    • 可以发现最终得出的是一个斐波那契数列:


      斐波那契数列
    编程实现
    PHP
    <?php
        运行时间:20ms
    
        占用内存:8208k
        function jumpFloor($number)
        {
            
            // write code here
            if ($number < 3){
                return $number;
            }
            $f1 = 1;
            $f2 = 2;
            for($i=3; $i <= $number; $i++){
                $temp = $f1 + $f2;
                $f1 = $f2;
                $f2 = $temp;
            }
            return $temp;
        }
    ?>
    
    Python
    # -*- coding:utf-8 -*-
    class Solution:
        #递归的方式,此方法时间超时,时间复杂度高
        def jumpFloorI(self, number):
            if number <= 2:
                return number
            else:
                return self.jumpFloorI(number - 1) + self.jumpFloorI(number - 2)
    
        # 使用迭代方法 20ms
        def jumpFloorII(self, number):
            if number < 3:
                return number
            else:
                one, two = 1, 2
                for i in range(number - 2):
                    one, two  = two, one + two
                return two
    
        # 使用数组的方式 30ms
        def jumpFloorIII(self, number):
            res = [1, 2]
            while len(res) <= number:
                res.append(res[-1] + res[-2])
            if number < 3:
                return number
            else:
                return res[number - 1]
    

    相关文章

      网友评论

          本文标题:[剑指-08](php&python):跳台阶

          本文链接:https://www.haomeiwen.com/subject/honjdqtx.html