2022-01-19:青蛙过河。 一只青蛙想要过河。 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有)。 青蛙可以跳上石子,但是不可以跳入水中。 给你石子的位置列
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:青蛙过河。 一只青蛙想要过河。 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有)。 青蛙可以跳上石子,但是不可以跳入水中。 给你石子的位置列相关推荐
- 2022.01.19翻译Ancient Berland Circus
Ancient Berland Circus 题目(https://acs.jxnu.edu.cn/problem/CF1C)描述: Nowadays all circuses in Berland ...
- 2022.01.19 - SX10-23.零钱兑换
文章目录 1. 题目 2. 思路 (1) 动态规划 3. 代码 1. 题目 2. 思路 (1) 动态规划 dp[i]表示凑成金额i所需的最小硬币个数,初始化时,dp[i]=Max,dp[0]=0. 注 ...
- 【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 - ...
- [递归]一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
这题是用C写的~ 在牛客上半天找不着ACM模式,练习模式里只有核心代码模式 这样用C语言编译器就不能自定义函数啊,不鸡肋吗??? 解决方法:在核心代码模式下用C++编译器(反正C++完全兼容C的不是吗 ...
- 【python逻辑算法题】一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法
文章目录 一.题目描述 二.问题分析 三.代码分析与逻辑(python3实现) 四.源码及运行结果 总结 提示:以下是本篇文章正文内容: 一.题目描述 题目:一只青蛙一次可以跳上1级台阶,也可以跳上2 ...
- c语言青蛙游戏,c语言:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?...
一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法? 解:把n级台阶时的跳法记为f(n),当n>2时,第一次跳的时候有两种不同的选择:一是第一次只跳1级,此 ...
- 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?(递归与动态规划)
一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法? private static HashMap<Integer, Long> record = n ...
- 牛客网刷题java之(斐波那契数列)一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 分析: 对于本题,前提只有 一次 1阶或者2阶的跳法. a.如果两种跳法, ...
- 牛客网刷题java之变态跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 分析: 其实和普通的只能跳一个和两个台阶的思路是一样的,都是为了求迭代表达式. ...
最新文章
- SQL函数设计——临时表的使用
- python离线安装国内镜像OpenCV
- xlwt写入单元格,xlrd读出单元格
- leetcode-search-in-rotated-sorted-array
- linux mplayer_移植mplayer播放器到EK200开发板的步骤浅析
- 【Java教程系列】JavaSE核心知识点总结
- Solidity编程 二 之Solidity安装
- spark学习-49-Spark的job调度
- C盘不能新建文件的问题解决办法
- jetty-maven-plugin
- VS中使用ankhSVN
- 特教学校计算机课,特教学校引入编程课 为听障孩子打开智能之门
- [剑指offer]-导航总结篇
- 如何将mp4视频压缩到最小?
- 不查日历怎么知道任何一天是星期几
- GJM :C++ 资源收集小结
- 超级蒙特卡罗软件SuperMC免费下载方式
- 几亿人都在玩的谷歌小恐龙游戏,全世界最高分是 99999?你呢?
- 计算机网络Cisco Packet Tracer实验
- c++函数 十进制转换成二进制
热门文章
- 【R】R语言windows下连接MySQL
- 乾隆盛世,居然是“饥饿的盛世”?
- webdriver设置浏览器全屏及设置浏览器窗口为特定大小的方法
- eclipse设置工作空间的默认编码和设置项目的编码
- 直播预约 | 如何通过MLOps解放和提升AI生产力?
- c语言如何编辑一个长方形,C语言对象编程第一弹封装与抽象(建立长方形对象)...
- [C++] printf pitfall
- SIFT算法原理(2)-极值点的精确定位
- 关于计算机学院的毕业论文致谢,计算机学院毕业生论文致谢范文
- Docker - 启动tomcat成功但无法打开8080