剑指 Offer 10- II. 青蛙跳台阶问题 Python
2020-07-16 18:01
169 查看
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例 1:
输入:n = 2
输出:2
示例 2:
输入:n = 7
输出:21
提示:
0 <= n <= 100
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
还是按照上一题的写法,可以这样写,但是我觉得这样没有第二种写法直白好理解。见仁见智吧。
class Solution: def numWays(self, n): a, b = 1, 1 if n>=1 : for _ in range(n-1): a, b = a+b , a return a % 1000000007
class Solution: def numWays(self, n: int) -> int: # 动态规划法 dp = [0] * (n+1) dp[0] = 1 if n >= 1: dp[1] = 1 for i in range(2, n+1): dp[i] = dp[i-1] + dp[i-2] return dp[n] % 1000000007
- 初始化
dp = [0] * (n+1)
其中dp[i]
为斐波那契数列的第i
项的值 f(n) = f(n-1) + f(n-2)
其中f(0)
和f(1)
为1
, 等式成立当n>=2
动态规划法
使用动态规划进行求解的时候,这个问题本身除了具备最优子结构特性以外,还具备求解过程中,子问题划分的过程中存在大量重复的计算的特征。
- 具备最优子结构
f(n) = f(n-1) + f(n-2)
- 存在大量重复计算 例如:
f(5) = f(4) + f(3) = (f(3)+f(2)) + (f(2)+f(1))
- 可递归,亦可迭代
就这题而言,用了备忘录算法,避免了重复计算,
dp[i]是通过已记录的
dp[i-1]和
dp[i-2]算得的,用空间换取时间。
相关文章推荐
- 我要失业了 Day 1 剑指Offer 10-II.青蛙跳台阶问题
- 剑指Offer LeetCode 面试题10- II. 青蛙跳台阶问题
- 面试题10- II. 青蛙跳台阶如此简单 剑指offer
- 剑指Offer-青蛙跳台阶-Python
- 剑指offer-----青蛙跳台阶问题(1)
- [剑指offer]算法8 青蛙跳台阶问题
- 剑指offer青蛙跳台阶问题
- 剑指offer面试题9-青蛙跳台阶及其变种问题
- Leecode 面试题10- II. 青蛙跳台阶问题(斐波拉契数列)
- 剑指offer中的青蛙跳台阶问题
- 剑指offer面试题9 斐波那契数列及青蛙跳台阶问题
- 剑指offer. 青蛙跳台阶问题
- [牛客网,剑指offer,python] 变态跳台阶
- 剑指offer-青蛙跳台阶
- 剑指offer 面试题9 斐波那契数列/青蛙跳台阶/矩形覆盖/变态跳台阶
- 剑指offer--跳台阶(递归问题)
- [牛客网,剑指offer,python] 变态跳台阶
- 剑指offer-10-Python实现(二进制中1的个数)
- [牛客网,剑指offer,python] 变态跳台阶
- 剑指Offer [Python] | 9 变态跳台阶