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

说明:记录刷剑指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

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):跳台阶)