【Python学习-递归-斐波那契数列】【剑指offer】之跳台阶

【Python学习-递归-斐波那契数列】【剑指offer】之跳台阶

题目

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

分析

假设跳上n级台阶一共需要F(n)种跳法,由于它可以跳1级台阶或者2级台阶,所以它上一步必定在第n-1,或者第n-2级台阶,所以F(n)=F(n-1)+F(n-2),所以可以用到递归,递归需要出口,只需要分析开始的初始情况即可,与斐波那契数列类似。
n=0;F(n)=0;
n=1;F(n)=1;
n=2;F(n)=2(1+1/2);

代码

不要用F(n)=F(n-1)+F(n-2)这种递归,会重复,不推荐。

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

变态跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

分析

易知 F(n)=F(n-1)+F(n-2)+……f(1)
F(n-1)=F(n-2)+……F(1)
两式相减得F(n)=2F(n-1)
得到递归规律。

代码

# -*- coding:utf-8 -*-
class Solution:
    def jumpFloorII(self, number):
        # write code here
        n=1
        for i in range(1,number):
            n=2*n
        return n

矩形覆盖

我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,总共有多少种方法?
比如n=3时,2
3的矩形块有3种覆盖方法:
在这里插入图片描述

分析

该题本质也是递归,需要从覆盖的过程找到规律,n的时候的情况要与n-1,n-2的情况联系起来。与前面的例子比较类似,矩阵横着放与竖着放代表两种情况,横着放占用2个,竖着放占用1个。
在这里插入图片描述

代码

代码与第一个青蛙跳台阶一模一样,掌握思想很重要!

# -*- coding:utf-8 -*-
class Solution:
    def rectCover(self, number):
        # write code here
        a = [0,1,2]
        if number<3:
            return a[number]
        for i in range(3,number+1):
            a.append(a[i-1]+a[i-2])
        return a[number]
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值