今天在写二叉树路径问题的博客,突然发现每日一题的题目是<自由之路>,一串熟悉的名字,而当时我耳机里播放着的正是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 + 记忆化搜索)相关推荐

  1. dfs记忆化搜索(带限制的选择问题) 讲解:LeetCode打家劫舍||| / 蓝桥 地宫取宝/蓝桥 k进制数//剪格子//方格分割

    记忆化递归的必要性: 普通的递归可能会重复求解某一值,类似斐波那契数列.同样的子问题可能会被求解多次,这样就会很慢很慢很慢 解决方法:我们把历史求解(子问题)记录下来,如果下次需要求解子问题,那么直接 ...

  2. UVA10285 Longest Run on a Snowboard【DFS+记忆化搜索】

    Michael likes snowboarding. That's not very surprising, since snowboarding is really great. The bad ...

  3. 递归 dfs 记忆化搜索 动态规划

    今天做洛谷P1434 [SHOI2002]滑雪 的时候仔细想了想记忆化搜索 现在总结一下 为了描述问题的某一状态,必须用到该状态的上一状态,而描述上一状态,又必须用到上一状态的上一状态--这种用自已来 ...

  4. 8636 跳格子(dfs+记忆化搜索)

    8636 跳格子 该题有题解 时间限制:2457MS  内存限制:1000K 提交次数:139 通过次数:46 题型: 编程题   语言: G++;GCC Description 地上有一个n*m 的 ...

  5. 牛客假日团队赛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 ...

  6. POJ1088 Bailian1088 滑雪【DFS+记忆化搜索】

    滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 114685 Accepted: 43807 Description Mic ...

  7. DFS——记忆化搜索——动态规划

    以洛谷P1802  5倍经验日 为例 https://www.luogu.org/problem/show?pid=1802 题目背景 现在乐斗有活动了!每打一个人可以获得5倍经验!absi2011却 ...

  8. 蓝桥杯 地宫取宝【第五届】【省赛】【C组】C++ dfs 记忆化搜索

    资源限制 时间限制:1.0s   内存限制:256.0MB X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被 ...

  9. Leetcode每日一题:35.search-insert-position(搜索插入位置)

    思路:有序查找首先想到二分:这里的话,再加一个判断:如果最后得到的下标对应的值小于target的话,说明target应该插入到这个下标的右边:否则,应该插入到该下标位置: class Solution ...

  10. 蓝桥杯 ALGO-1005 数字游戏 DFS记忆化搜索+剪枝+杨辉三角 python

    题目 问题描述 给定一个1-N的排列a[i],每次将相邻两个数相加,得到新序列,再对新序列重复这样的操作,显然每次得到的序列都比上一次的序列长度少1,最终只剩一个数字. 例如: 3 1 2 4 4 3 ...

最新文章

  1. 在Linux上安装PostgreSQL
  2. C#中调用API函数RegisterHotKey注册多个系统热键
  3. Web公路,新手上路!NO.2 [ 基础标签(一)]
  4. 【图像超分辨率】遥感数据的高斯金字塔尺度上推方法研究
  5. Lua语言中pairs和ipairs的区别
  6. PLSQL的表窗口开启(不小心把PLSQL的表窗口关了,在哪里打开)
  7. 前端组件化思想与实践
  8. php修改学生信息代码_PHP连接MySQL数据库添加图书功能
  9. 结合使用 Oracle 和 Ruby on Rails 的补充
  10. 我了解的软件测试基本概念
  11. 变形金刚2影院版完整字幕
  12. 【Unity入门】3.3D物体
  13. Ubuntu 使用命令向QQ邮箱发送邮件
  14. 概率论中Z=max(X,Y)和Z=min(X,Y)的分布
  15. linux版英特尔酷睿i7,英特尔酷睿i7 1165G7和AMD Ryzen 7 Pro 4750U Linux性能对比
  16. STM32 keyboard USB键盘功能的实现
  17. R语言1----Excel格式数据的导入
  18. 记录用web scraper爬取裁判文书网的文书列表信息以及批量下载word文书
  19. 人工智能产业发展路线图是,先建岛,再扩区,由点到面
  20. [渝粤教育] 长春中医药大学 药事管理与法规 参考 资料

热门文章

  1. 关于SNIP NTRIP Caster学习笔记
  2. 数学公式神器【MathPix Snip】,截屏公式转为LaTeX代码
  3. Task01:熟悉新闻推荐系统的基本流程(数据库设计)
  4. matlab仿真整流电路设计,整流电路MATLAB仿真实验
  5. Tbase基础积累一
  6. RTL8152B-VB-CG usb转网口芯片驱动指示灯驱动调试
  7. 软件测试职业目标具体计划范文,关于测试的工作计划
  8. UNet++ 论文翻译
  9. 二自由度云台扫描算法_基于二维压电透射式微扫描器的红外超分辨率成像|压电扫描台...
  10. 噪声与振动控制工程手册_轴承噪声种类大全!领取实用轴承手册