一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
实现方式有很多,可以根据推论用位运算、递归、或者直接用pow方法
我这里只要是考虑用动态规划的思路去解决,空间效率不是最好,只是说最近在了解动态规划,所以一题多解嘛

public class Solution {public int JumpFloorII(int target) {if(target==0){return 0;}if(target==1){return 1;}if(target==2){return 2;}//数组下标对应的值代表到达该下标位置的跳法数int[] arrays = new int[target+1];arrays[0]=1; //直接跳到target,永远为1,且计算第i层(除去1,2)都会加要加上这个arrays[1]=1;arrays[2]=2;for(int i=3;i<=target;i++){//下边的循环的意思是第i位置前边的第j(j>=1)个位置对应跳数相加//到j=0时,表示一次性跳到i位置。for(int j=0;j<=i-1;j++){arrays[i] = arrays[j]+arrays[i];}}return arrays[target];/*else{return (int)(Math.pow(2,target-1));}*/}
}

关于本题,前提是n个台阶会有一次n阶的跳法。分析如下:

f(1) = 1

f(2) = f(2-1) + f(2-2) //f(2-2) 表示2阶一次跳2阶的次数。

f(3) = f(3-1) + f(3-2) + f(3-3)

f(n) = f(n-1) + f(n-2) + f(n-3) + … + f(n-(n-1)) + f(n-n)

说明:

1)这里的f(n) 代表的是n个台阶有一次1,2,…n阶的 跳法数。

2)n = 1时,只有1种跳法,f(1) = 1

  1. n = 2时,会有两个跳得方式,一次1阶或者2阶,这回归到了问题(1) ,f(2) = f(2-1) + f(2-2)

  2. n = 3时,会有三种跳得方式,1阶、2阶、3阶,

    那么就是
    第一次跳出1阶后面剩下:f(3-1);
    第一次跳出2阶,剩下f(3-2);
    第一次3阶,那么剩下f(3-3)

    因此结论是f(3) = f(3-1)+f(3-2)+f(3-3)

  3. n = n时,会有n中跳的方式,1阶、2阶…n阶,得出结论:

    f(n) = f(n-1)+f(n-2)+…+f(n-(n-1)) + f(n-n) => f(0) + f(1) + f(2) + f(3) + … + f(n-1)
    到这里我们已经可以使用动态规划的方法了,根据n阶数所对应的跳法,可建立线索记忆化的数组
    例如当 target = 3 时 该数组有长度为4,index=0的值为0,index=1的值为1,index=2的值为2。

  4. 由以上已经是一种结论,但是为了简单,我们可以继续简化:

    f(n-1) = f(0) + f(1)+f(2)+f(3) + … + f((n-1)-1) = f((n-1)-(n-1)) +f((n-1)-(n-2))+ … + f(n-2)+ f((n-1)-1)

    f(n) = f(n-n) + f(n-(n-1))+…+f(n-2)+f(n-1) = f(0) + f(1) + f(2) + f(3) + … + f(n-2) + f(n-1)

    可以得出:

    f(n) = 2*f(n-1) -> f(n)=2^(n-1)。这是一个推出来的公式,然后直接调用pow方法也可以得到结果

if(target==0){return 0;}
return (int)(Math.pow(2,target-1));

超级跳台阶的动态规划实现相关推荐

  1. 台阶问题---动态规划算法

    问题描述 所谓的台阶问题就是说,从0开始上台阶1,2,3...n,每次只能上1个或者2个台阶.问上到n个台阶有多少种走法.这个问题是比较典型的,也有很多种变形,我们先讲解下这种的实现. 问题分析 我们 ...

  2. [剑指offer][JAVA]面试题第[10-2]题[青蛙跳台阶问题][动态规划][递归]

    [问题描述][中等] 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法.答案需要取模 1e9+7(1000000007),如计算初始结果为:100000 ...

  3. 剑指offer面试题10- II. 青蛙跳台阶问题(动态规划)(递归)(斐波那契数列)

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008, ...

  4. 台阶问题——动态规划

    台阶问题 题目描述 有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少11级),问到达第N级台阶有多少种不同方式. 输入格式 两个正整数N,K. 输出格式 一个正整数,为不同方式数,由于答 ...

  5. 动态规划的框架(套路), 总结

    动态规划题目千变万化,很多人刚入门时候都觉得非常难以理解,题目越做越挫,越做打击越大,看着别人的题解,心里只能默念一句卧槽,这都能写出状态方程! 走了那么多弯路,才发现问题所在,主要原因是因为基础的东 ...

  6. Leetcode-跳台阶问题

    一次跳一阶或者跳两阶 使用递归求解 使用动态规划,可当做斐波那契数列 第一次跳1阶,则有F(n−1)F(n-1)F(n−1)次跳法: 第一次跳2阶,则有F(n−2)F(n-2)F(n−2)次跳法: 因 ...

  7. LeetCode刷题剑指 Offer 10- II. 青蛙跳台阶问题

    LeetCode刷题剑指 Offer 10- II. 青蛙跳台阶问题 动态规划的思想,青蛙每次可以跳一个或两个台阶,要想得到最终青蛙跳n阶台阶的方法数,需要找到青蛙跳n-1个台阶的方法数和跳n-2个台 ...

  8. 【剑指offer】【leetcode精选题集】【Java】剑指offer题解合集 更新中

    Leetcode题集 [剑指offer][JAVA]面试题第[03]题[数组中的重复数字][HashSet] [剑指offer][JAVA]面试题第[04]题[二维数中的查找][数组] [剑指offe ...

  9. 算法工程师笔试 -剑指offer-习题详细解答

    说明 主要编程语言为 C/C++ 涉及字符串的问题可能会使用 Python 题目编号以原书为准,如"面试题 3:数组中重复的数字" 因为题目不多,所以就不做分类了 所有代码均通过 ...

  10. 深信服面试常见算法题整理笔记

    ⭐️我叫恒心,一名喜欢书写博客的研究生在读生. 原创不易~转载麻烦注明出处,并告知作者,谢谢!!! 这是一篇近期会不断更新的博客欧~~~ 有什么问题的小伙伴 欢迎留言提问欧. 文章目录 1 反转链表 ...

最新文章

  1. Windows 技巧篇-鼠标指针安装方法,漂亮的鼠标指针推荐
  2. 【好书试读】大数据处理之道
  3. 【题解】luogu p1111 修复公路
  4. (原創) 今天拿到學生證了 (日記)
  5. Django-内置用户系统
  6. oracle asm 分布式存储,分布式数据中心数据库和存储部署解决方案
  7. CentOS 7 修改IP地址
  8. 新书 | Kevin P. Murphy《概率机器学习:进阶》PDF开放下载
  9. RN调试利器——React Native Debugger
  10. ubuntu 移动硬盘复制小文件可以,复制大文件总是复制不成功
  11. 端口错误 给Arduino下载程序提示
  12. 计算机如何设置桌面文件筐,360安全桌面怎么设置文件筐 自定义分框其实非常简单...
  13. 【Linux】安装系统的时候遇到grub-install Error 问题的解决,超详细傻瓜式教程
  14. C措辞教程第四章: 数组(8)
  15. python循环语句打印输出1-10_python_不用循环打印1-1000
  16. 按文件名批量分类文件到文件夹
  17. tp-link无线路由与android手机无线连接设置指南,苹果手机(iPhone)无线连接TP-LINK路由器解决方案...
  18. 用FreeMarker生成Word文档
  19. VC欣赏、家人是阻力,极客化、国际化——90后创业生态
  20. matlab曲线加颜色,matlab学习之绘制参数曲线,添加辅助线以及颜色设置

热门文章

  1. syswow64删除文件_syswow64 c盘syswow64可以删除吗
  2. 汽车暖风系统操作步骤
  3. 关于IT公司技术委员会职责
  4. 多少秒算长镜头_电影术语中长镜头是什么意思?
  5. [09-Dec-2012] 《少年pi的奇幻之旅》 -推荐
  6. 12 最长考拉兹序列
  7. Dropping Balls 小球下落
  8. 编程实现库函数strcat
  9. 云服务器搭建网站域名要备案吗,域名绑定服务器需要备案吗
  10. English improvement of IT Test(2016)