[剑指-08](php&python):跳台阶
2019-01-14 本文已影响0人
myFamily329
说明:记录刷剑指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]