<自由之路>LeetCode每日一题(DFS + 记忆化搜索)
今天在写二叉树路径问题的博客,突然发现每日一题的题目是<自由之路>,一串熟悉的名字,而当时我耳机里播放着的正是Rimsky的<天方夜谭>。
巧合的正是:游戏<辐射4>里的一个有趣且烦人的任务叫<自由之路>,而游戏里的古典音乐电台总是会播着Rimsky这首奇妙宏伟的音乐。我不是迷信的人,但我会在意这些偶然聚在一起时奇妙的反应,让我想到了很多:玩辐射4的快乐、3月份在家里沉迷俄罗斯乐派各种浪漫作品的时光……
当然,这道题本质上也是一道最短路径问题,所以为了它写一份博客还是值得的。
514. 自由之路
一开始直接DFS是超时的,然后用了记忆化搜索。
private int[][] memo;public int findRotateSteps(String ring, String key) {memo = new int[key.length()][ring.length()];//三种初始化方法,第一种方法是错误的
// for (int[] nums : memo)
// for (int num : nums)
// num = -1;// for (int i = 0; i < memo.length; i++)// for (int j = 0; j < memo[0].length; j++)// memo[i][j] = -1;for (int[] nums : memo)Arrays.fill(nums, -1);return dfs(ring, key, 0, 0) + key.length();}// index:当前需要拼出key字符串中的index位置字符,等于key.length()时即拼完。// p:当前的零点位置(十二点方向的位置),即index位置字符的目标位置。private int dfs(String ring, String key, int index, int p) {// System.out.println("一、" + index + " " + p);if (index == key.length())return 0;if (memo[index][p] != -1)return memo[index][p];int l = p, r = p;int lstep = 0, rstep = 0;while (ring.charAt(l) != key.charAt(index)) {l = (l + 1 + ring.length()) % ring.length();lstep += 1;}while (ring.charAt(r) != key.charAt(index)) {r = (r - 1 + ring.length()) % ring.length();rstep += 1;}int goRight = dfs(ring, key, index + 1, l) + lstep;int goLeft = dfs(ring, key, index + 1, r) + rstep;return memo[index][p] = Math.min(goLeft, goRight);}
<自由之路>LeetCode每日一题(DFS + 记忆化搜索)相关推荐
- dfs记忆化搜索(带限制的选择问题) 讲解:LeetCode打家劫舍||| / 蓝桥 地宫取宝/蓝桥 k进制数//剪格子//方格分割
记忆化递归的必要性: 普通的递归可能会重复求解某一值,类似斐波那契数列.同样的子问题可能会被求解多次,这样就会很慢很慢很慢 解决方法:我们把历史求解(子问题)记录下来,如果下次需要求解子问题,那么直接 ...
- UVA10285 Longest Run on a Snowboard【DFS+记忆化搜索】
Michael likes snowboarding. That's not very surprising, since snowboarding is really great. The bad ...
- 递归 dfs 记忆化搜索 动态规划
今天做洛谷P1434 [SHOI2002]滑雪 的时候仔细想了想记忆化搜索 现在总结一下 为了描述问题的某一状态,必须用到该状态的上一状态,而描述上一状态,又必须用到上一状态的上一状态--这种用自已来 ...
- 8636 跳格子(dfs+记忆化搜索)
8636 跳格子 该题有题解 时间限制:2457MS 内存限制:1000K 提交次数:139 通过次数:46 题型: 编程题 语言: G++;GCC Description 地上有一个n*m 的 ...
- 牛客假日团队赛5 F 随机数 BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数 (dfs记忆化搜索的数位DP)...
链接:https://ac.nowcoder.com/acm/contest/984/F 来源:牛客网 随机数 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...
- POJ1088 Bailian1088 滑雪【DFS+记忆化搜索】
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 114685 Accepted: 43807 Description Mic ...
- DFS——记忆化搜索——动态规划
以洛谷P1802 5倍经验日 为例 https://www.luogu.org/problem/show?pid=1802 题目背景 现在乐斗有活动了!每打一个人可以获得5倍经验!absi2011却 ...
- 蓝桥杯 地宫取宝【第五届】【省赛】【C组】C++ dfs 记忆化搜索
资源限制 时间限制:1.0s 内存限制:256.0MB X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被 ...
- Leetcode每日一题:35.search-insert-position(搜索插入位置)
思路:有序查找首先想到二分:这里的话,再加一个判断:如果最后得到的下标对应的值小于target的话,说明target应该插入到这个下标的右边:否则,应该插入到该下标位置: class Solution ...
- 蓝桥杯 ALGO-1005 数字游戏 DFS记忆化搜索+剪枝+杨辉三角 python
题目 问题描述 给定一个1-N的排列a[i],每次将相邻两个数相加,得到新序列,再对新序列重复这样的操作,显然每次得到的序列都比上一次的序列长度少1,最终只剩一个数字. 例如: 3 1 2 4 4 3 ...
最新文章
- 在Linux上安装PostgreSQL
- C#中调用API函数RegisterHotKey注册多个系统热键
- Web公路,新手上路!NO.2 [ 基础标签(一)]
- 【图像超分辨率】遥感数据的高斯金字塔尺度上推方法研究
- Lua语言中pairs和ipairs的区别
- PLSQL的表窗口开启(不小心把PLSQL的表窗口关了,在哪里打开)
- 前端组件化思想与实践
- php修改学生信息代码_PHP连接MySQL数据库添加图书功能
- 结合使用 Oracle 和 Ruby on Rails 的补充
- 我了解的软件测试基本概念
- 变形金刚2影院版完整字幕
- 【Unity入门】3.3D物体
- Ubuntu 使用命令向QQ邮箱发送邮件
- 概率论中Z=max(X,Y)和Z=min(X,Y)的分布
- linux版英特尔酷睿i7,英特尔酷睿i7 1165G7和AMD Ryzen 7 Pro 4750U Linux性能对比
- STM32 keyboard USB键盘功能的实现
- R语言1----Excel格式数据的导入
- 记录用web scraper爬取裁判文书网的文书列表信息以及批量下载word文书
- 人工智能产业发展路线图是,先建岛,再扩区,由点到面
- [渝粤教育] 长春中医药大学 药事管理与法规 参考 资料
热门文章
- 关于SNIP NTRIP Caster学习笔记
- 数学公式神器【MathPix Snip】,截屏公式转为LaTeX代码
- Task01:熟悉新闻推荐系统的基本流程(数据库设计)
- matlab仿真整流电路设计,整流电路MATLAB仿真实验
- Tbase基础积累一
- RTL8152B-VB-CG usb转网口芯片驱动指示灯驱动调试
- 软件测试职业目标具体计划范文,关于测试的工作计划
- UNet++ 论文翻译
- 二自由度云台扫描算法_基于二维压电透射式微扫描器的红外超分辨率成像|压电扫描台...
- 噪声与振动控制工程手册_轴承噪声种类大全!领取实用轴承手册