跳台阶是斐波那契数列的一个典型应用,其思路如下:

# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.value=[0]*50
def jumpFloor(self, number):
# write code here
self.value[0]=1
self.value[1]=2
for i in range(2,number):
self.value[i]=self.value[i-1]+self.value[i-2]
return self.value[number-1]

这里为了避免递归的低效率,采用数组遍历的方式。 时间复杂度依旧为O(n).

仔细观察‘变态跳台阶’,其思路其实和‘跳台阶很类似’,如下:

f(1) = 1    //n = 1时,只有1种跳法,f(1) = 1

f(2) = 2        //n = 2时,会有两个跳得方式,一次1阶或者2阶

n>=3时:

f(3) = f(1) + f(2) + 1   //最后的1表示3阶一次跳3阶的一种方法

...

f(n) = f(1) + f(2) +  ... + f(n-3) + f(n-2) + f(n-1) + 1

# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.value=[0]*50
def jumpFloorII(self, number):
# write code here
if number==0:
return -1
self.value[0]=1
self.value[1]=2
for i in range(2,number):
m=0
while m<=i-1: #注意这里从f(1)+....+f(n-1)的条件
self.value[i]+=self.value[m]
m+=1
self.value[i]+=1  
return self.value[number-1]

但是上述方法其实还可以简化:

由上我们已经得到:  f(n) = f(1) + f(2) +  ... + f(n-3) + f(n-2) + f(n-1) + 1

设 f(0) = 1,则上述可变为: f(n) = f(0) + f(1) + f(2) +  ... + f(n-3) + f(n-2) + f(n-1)

同时也有: f(n-1) = f(0) + f(1) + f(2) +  ... + f(n-3) + f(n-2)  代入上式有: f(n) = 2*f(n-1)

前提 f(0)=1(但是没有0阶台阶的,这只是用来推导,没有实际意义), f(1)=1, 可以得到:

f(2)=2, f(3)=4, f(4)=8, f(5)=16....

从而得出最终结论,在n阶台阶,一次有1、2、...n阶的跳的方式时,总得跳法为:

| 1       ,(n=0 )

f(n) =     | 1       ,(n=1 )

              | 2*f(n-1),(n>=2)
class Solution:
def __init__(self):
self.value=[0]*50
def jumpFloor(self, number):
# write code here
if number==0:
return -1
self.value[0]=1 #没有0阶台阶
self.value[1]=1
for i in range(2,number+1):
self.value[i]=2*self.value[i-1]
return self.value[number]

[剑指offer] 8+9. 跳台阶+变态跳台阶 (递归 时间复杂度)的更多相关文章

  1. 【剑指Offer】面试题10- II. 青蛙跳台阶问题

    题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返 ...

  2. 剑指 Offer 13. 机器人的运动范围 + 深搜 + 递归

    剑指 Offer 13. 机器人的运动范围 题目链接 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2020/12/ ...

  3. [剑指OFFER] 斐波那契数列- 跳台阶 变态跳台阶 矩形覆盖

    跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. class Solution { public: int jumpFloor(int number) ...

  4. 【校招面试 之 剑指offer】第10-2题 青蛙跳台阶问题

    题目1:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个n级台阶共有多少种跳法? 题目2:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶...也可以一次跳n级台阶.求该青蛙跳上一个 ...

  5. 《剑指offer》— JavaScript(8)跳台阶

    跳台阶 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 实现代码 function jumpFloor(number) { if (number& ...

  6. 《剑指offer》面试题10- II. 青蛙跳台阶问题

    问题描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008, ...

  7. 剑指offer:对称的二叉树(镜像,递归,非递归DFS栈+BFS队列)

    1. 题目描述 /** 请实现一个函数,用来判断一颗二叉树是不是对称的. 注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的 */ 2. 递归 思路: /** 1.只要pRoot.left和 ...

  8. 剑指Offer 7. 斐波那契数列 (递归)

    题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 题目地址 https://www.nowcoder.com/prac ...

  9. 【剑指offer】斐波那契数列非递归求解第N项

    public class Solution { public int Fibonacci(int n) { //错误输入处理 if(n<0) return -1; int pre = 1; in ...

  10. [剑指Offer]判断一棵树为平衡二叉树(递归)

    题目链接 https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId=0&tqId=0&rp=2&a ...

随机推荐

  1. Problem 2

    Problem 2 # Problem_2.py """ Each new term in the Fibonacci sequence is generated by ...

  2. Centos7 下安装 Docker

    一.简介 Docker是一个开源的应用容器引擎:是一个轻量级容器技术:Docker支持将软件编译成一个镜像:然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像:运行中的这个镜 ...

  3. Swift入门(四)——可选类型(Optionals)与断言(Assert)

    可选类型是什么? 首先看一个问题,Swift中String类型的变量有一个叫做toInt的方法,能够把String类型变量转换为Int类型变量. var stringValue = "5&q ...

  4. HDU 5372 Segment Game

    /** 多校联合2015-muti7-1004 <a target=_blank href="http://acm.hdu.edu.cn/showproblem.php?pid=537 ...

  5. centos编译ffmpeg x264

    1.安装汇编编译器(一般系统自带吧).假设没有依照以下的命令安装吧 yum install yasm 2.使用最新x264源代码编译(仅仅支持编码)    在x264官网下载最新的代码http://w ...

  6. cocos2d-x 3.0 经常使用对象的创建方式

    cocos2d-x 3.0 中全部对象差点儿都能够用create函数来创建,其它的创建方式也是有create函数衍生. 以下来介绍下create函数创建一般对象的方法,省得开发中常常忘记啥的. 1.精 ...

  7. 【VC编程技巧】窗口☞3.5对单文档或者多文档程序制作启动画面

    (一)概要: 文章描写叙述了如何通过Visual C++ 2012或者Visual C++ .NET,为单文档或者多文档程序制作启动画面.在Microsoft Visual Studio 6.0中对于 ...

  8. UVA 11000- Bee 递推

    In Africa there is a very special species of bee. Every year, the female bees of such species give b ...

  9. 用户命令切换-命令su

    命令su格式为su [-] username su su - su test su root

  10. springMVC+uploadify3.1 文件上传 demo

    uploadify3.1 api 可参考:(点击打开链接) 需要springmvc的jar包 1.upload.jsp(主要代码) <script type="text/javascr ...