剑指offer/Python版、JZ9/跳台阶扩展问题、解题思路详述

剑指offer/Python版、JZ9/跳台阶扩展问题、解题思路详述

题目:跳台阶扩展问题

题目描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。

示例1

输入:3
返回值:4

解题思路

本题与上面跳台阶问题的不同就在于本题不限一次所跳台阶的次数,它的解题思路主要用到动态规划,即分析第一次跳不同台阶数剩下的台阶的跳法来得到高度为n阶台阶所有的跳法数。
同上篇跳台阶文章可知,对于n阶台阶,该问题的表达式为:
F(n)=F(n-1)+F(n-2)+…+F(1-1) (1)
由上式可得:
F(n-1)=F(n-2)+F(n-3)+…+F(1-1) (2)
由上述两式(1)-(2)得F(n)-F(n-1)=F(n-1),即F(n)=2F(n-1) (3)
由(3)可知n阶台阶的跳法为公比为2,首项F(1)=1的等比数列,即F(n)=2**n-1。

代码实现

# -*- coding:utf-8 -*-
class Solution:
    def jumpFloorII(self, number):
        # write code here
        if number <= 0:
            return 0
        else:
            return 2**(number - 1) #F(n)=2**n-1

如果你看后有所收获,欢迎点赞转发收藏,若文章存有错误,欢迎指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值