2022-01-19:青蛙过河。
一只青蛙想要过河。 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有)。 青蛙可以跳上石子,但是不可以跳入水中。
给你石子的位置列表 stones(用单元格序号 升序 表示), 请判定青蛙能否成功过河(即能否在最后一步跳至最后一块石子上)。
开始时, 青蛙默认已站在第一块石子上,并可以假定它第一步只能跳跃一个单位(即只能从单元格 1 跳至单元格 2 )。
如果青蛙上一步跳跃了 k 个单位,那么它接下来的跳跃距离只能选择为 k - 1、k 或 k + 1 个单位。 另请注意,青蛙只能向前方(终点的方向)跳跃。
示例 1:
输入:stones = [0,1,3,5,6,8,12,17]
输出:true
解释:青蛙可以成功过河,按照如下方案跳跃:跳 1 个单位到第 2 块石子, 然后跳 2 个单位到第 3 块石子, 接着 跳 2 个单位到第 4 块石子, 然后跳 3 个单位到第 6 块石子, 跳 4 个单位到第 7 块石子, 最后,跳 5 个单位到第 8 个石子(即最后一块石子)。
力扣403。

答案2022-01-19:

时间紧。具体见代码。

代码用golang编写。代码如下:

package mainimport "fmt"func main() {stone := []int{0, 1, 3, 5, 6, 8, 12, 17}ret := canCross(stone)fmt.Println(ret)
}func canCross(stones []int) bool {set := make(map[int]struct{})for _, num := range stones {set[num] = struct{}{}}dp := make(map[int]map[int]bool)return jump(1, 1, stones[len(stones)-1], set, dp)
}func jump(cur, pre, end int, set map[int]struct{}, dp map[int]map[int]bool) bool {if cur == end {return true}if _, ok := set[cur]; !ok {return false}if _, ok := dp[cur]; ok {if _, ok := dp[cur][pre]; ok {return dp[cur][pre]}}ans := (pre > 1 && jump(cur+pre-1, pre-1, end, set, dp)) || jump(cur+pre, pre, end, set, dp) || jump(cur+pre+1, pre+1, end, set, dp)if _, ok := dp[cur]; ok {dp[cur] = make(map[int]bool)}if _, ok := dp[cur][pre]; ok {dp[cur][pre] = ans}return ans
}

执行结果如下:


左神java代码

2022-01-19:青蛙过河。 一只青蛙想要过河。 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有)。 青蛙可以跳上石子,但是不可以跳入水中。 给你石子的位置列相关推荐

  1. 2022.01.19翻译Ancient Berland Circus

    Ancient Berland Circus 题目(https://acs.jxnu.edu.cn/problem/CF1C)描述: Nowadays all circuses in Berland ...

  2. 2022.01.19 - SX10-23.零钱兑换

    文章目录 1. 题目 2. 思路 (1) 动态规划 3. 代码 1. 题目 2. 思路 (1) 动态规划 dp[i]表示凑成金额i所需的最小硬币个数,初始化时,dp[i]=Max,dp[0]=0. 注 ...

  3. 【java】算法题:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级台阶总共有多少种跳法?列举所有跳法

    解题: 跳上1级1种方法    1 跳上2级2种方法    11,2 跳上3级4种方法    111,12,21,3 跳上4级8种方法    1111,112,121,211,22,13,31,4 - ...

  4. [递归]一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

    这题是用C写的~ 在牛客上半天找不着ACM模式,练习模式里只有核心代码模式 这样用C语言编译器就不能自定义函数啊,不鸡肋吗??? 解决方法:在核心代码模式下用C++编译器(反正C++完全兼容C的不是吗 ...

  5. 【python逻辑算法题】一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法

    文章目录 一.题目描述 二.问题分析 三.代码分析与逻辑(python3实现) 四.源码及运行结果 总结 提示:以下是本篇文章正文内容: 一.题目描述 题目:一只青蛙一次可以跳上1级台阶,也可以跳上2 ...

  6. c语言青蛙游戏,c语言:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?...

    一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法? 解:把n级台阶时的跳法记为f(n),当n>2时,第一次跳的时候有两种不同的选择:一是第一次只跳1级,此 ...

  7. 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?(递归与动态规划)

    一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法? private static HashMap<Integer, Long> record = n ...

  8. 牛客网刷题java之(斐波那契数列)一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

    题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 分析: 对于本题,前提只有 一次 1阶或者2阶的跳法. a.如果两种跳法, ...

  9. 牛客网刷题java之变态跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

    题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 分析: 其实和普通的只能跳一个和两个台阶的思路是一样的,都是为了求迭代表达式. ...

最新文章

  1. SQL函数设计——临时表的使用
  2. python离线安装国内镜像OpenCV
  3. xlwt写入单元格,xlrd读出单元格
  4. leetcode-search-in-rotated-sorted-array
  5. linux mplayer_移植mplayer播放器到EK200开发板的步骤浅析
  6. 【Java教程系列】JavaSE核心知识点总结
  7. Solidity编程 二 之Solidity安装
  8. spark学习-49-Spark的job调度
  9. C盘不能新建文件的问题解决办法
  10. jetty-maven-plugin
  11. VS中使用ankhSVN
  12. 特教学校计算机课,特教学校引入编程课 为听障孩子打开智能之门
  13. [剑指offer]-导航总结篇
  14. 如何将mp4视频压缩到最小?
  15. 不查日历怎么知道任何一天是星期几
  16. GJM :C++ 资源收集小结
  17. 超级蒙特卡罗软件SuperMC免费下载方式
  18. 几亿人都在玩的谷歌小恐龙游戏,全世界最高分是 99999?你呢?
  19. 计算机网络Cisco Packet Tracer实验
  20. c++函数 十进制转换成二进制

热门文章

  1. 【R】R语言windows下连接MySQL
  2. 乾隆盛世,居然是“饥饿的盛世”?
  3. webdriver设置浏览器全屏及设置浏览器窗口为特定大小的方法
  4. eclipse设置工作空间的默认编码和设置项目的编码
  5. 直播预约 | 如何通过MLOps解放和提升AI生产力?
  6. c语言如何编辑一个长方形,C语言对象编程第一弹封装与抽象(建立长方形对象)...
  7. [C++] printf pitfall
  8. SIFT算法原理(2)-极值点的精确定位
  9. 关于计算机学院的毕业论文致谢,计算机学院毕业生论文致谢范文
  10. Docker - 启动tomcat成功但无法打开8080