栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

offer 第10-II题 青蛙跳台阶问题

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

offer 第10-II题 青蛙跳台阶问题

前言

该系列文章为本人刷leetcode的记录,主要旨在分享刷题的思路及算法解析(尽可能的一题多解),另方便自己日后查阅回顾。代码的实现语言是python和go。

想进大厂免不了刷题,一起加油吧,小伙伴们!

题目 offer 第10-II题 青蛙跳台阶问题

链接: https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/

题目内容

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

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

输入:n = 2
输出:2

示例 2:

输入:n = 7
输出:21

示例 3:

输入:n = 0
输出:1
解题思路

分析:令F(n)看成问题:青蛙跳上n级台阶共有多少种跳法;

由于青蛙每次只能跳一级或者两级;所以对于n级台阶来说,F(n)=F(n-1)+F(n-2)等于跳上n-1级和n-2级台阶的跳法的总和;

所以有明显的递推公式:F(n)=F(n-1)+F(n-2) (当然这个也可以看成是动态规划的公式)

解法1:递归;同样对于n过于大的使用尾递归;这题也是只需要返回最后的结果就行

解法2:动态规划: 非递归迭代;

代码实现 python
def numWays( n: int) -> int:
    #方法1:尾递归
    if n==0: return 0
    def recur_tail(n,f0,f1):
        if n==1: return 1
        elif n==2: return 2
        elif n==3: return f0+f1
        else : return recur_tail(n-1,f1,f0+f1)

    return recur_tail(n,1,2)

    #方法2:动态规划;非递归迭代解法;
    # if n<3: return n
    # else:
    #     f1,f2 = 1,2
    #     for i in range(3,n+1):
    #         fn = f1+f2
    #         f1 = f2
    #         f2 = fn
    # return fn

go
	//方法1:尾递归
	//if  n==0{return 0}
	//const mod  int = 1e9+7
	//var recur_tail func(n,f1,f2 int) int
	//recur_tail = func(n,f1,f2 int) int{
	//	if n==1{return 1
	//	}else if n==2{return 2
	//	}else if n==3{return (f1+f2)%mod
	//	}else{return recur_tail(n-1,f2%mod,(f1+f2)%mod)}
	//}
	//
	//return recur_tail(n,1,2)

	//
	动态规划;非递归迭代算法
	var fn int
	const mod int  =1e9+7
	if n<3{return n
	}else{
		f1,f2 := 1,2
		i :=3
		for ;i 
总结 

注意尾递归的使用还要递归层次的设计(递归到哪一层截止);

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/350246.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号