首页IT科技怎样跳台阶跳多一些(每日算法之跳台阶扩展问题)

怎样跳台阶跳多一些(每日算法之跳台阶扩展问题)

时间2025-06-12 20:52:36分类IT科技浏览4934
导读:JZ71跳台阶扩展问题 描述 一只青蛙一次可以跳上1...

JZ71跳台阶扩展问题

描述

一只青蛙一次可以跳上1级台阶            ,也可以跳上2级……它也可以跳上n级               。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法                  。 数据范围:1 \le n \le 201≤n≤20 进阶:空间复杂度 O(1)O(1)                      , 时间复杂度 O(1)O(1)

方法1 动态规划

思路:

对于最后一级台阶      ,我们可以由倒数第二级台阶跳1步         ,也可以由倒数第三级太极跳两步                     ,即f(n)=f(n−1)+f(n−2)+...+f(n−(n−1))+f(n−n)=f(0)+f(1)+f(2)+...+f(n−1)f(n)=f(n-1)+f(n-2)+...+f(n-(n-1))+f(n-n)=f(0)+f(1)+f(2)+...+f(n-1)f(n)=f(n−1)+f(n−2)+...+f(n−(n−1))+f(n−n)=f(0)+f(1)+f(2)+...+f(n−1)          ,因为f(n−1)=f(n−2)+f(n−3)+...+f((n−1)−(n−2))+f((n−1)−(n−1))f(n-1)=f(n-2)+f(n-3)+...+f((n-1)-(n-2))+f((n-1)-(n-1))f(n−1)=f(n−2)+f(n−3)+...+f((n−1)−(n−2))+f((n−1)−(n−1))      ,经整理得f(n)=f(n−1)+f(n−1)=2∗f(n−1)f(n)=f(n-1)+f(n-1)=2*f(n-1)f(n)=f(n−1)+f(n−1)=2∗f(n−1)                    ,因此每级台阶方案数是前面一级台阶方案数的2倍      。

代码

int[] bp = new int[target + 1]; bp[0] = 1; bp[1] = 1; for (int i = 2; i <= target; i++) { bp[i] = 2 * bp[i - 1]; } return bp[target];

方法2 递归

代码

package esay.JZ71跳台阶扩展问题; public class Solution { public int jumpFloorII(int target) { //方法1:动态规划 /*int[] bp = new int[target + 1]; bp[0] = 1; bp[1] = 1; for (int i = 2; i <= target; i++) { bp[i] = 2 * bp[i - 1]; } return bp[target];*/ //方法2:递归 if (target <= 1) return 1; return 2 * jumpFloorII(target - 1); } }

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
网创科技(有什么网创的办法-在网上如何赚钱?学习知识模仿大家) 网站关键词排名优化公司(如何选择优秀的SEO网站关键词优化公司?)