思路:首先想到的就是深度优先搜索,从ring[i]顺时针到达key[j]的路径和逆时针的路径都尝试一遍,最终肯定能得到最短路径,但肯定会超时,因为这个复杂度是幂级的,即每个点都有两种可能;

所以,需要对我们尝试过的路径作标注,m["i # j"]即代表从ring[i]到key[j]的最短路径;

比起动态规划还是差远了;

map<string, int> m;int dfs(string ring, int x, string key, int y)
{int len = ring.size();if (y == key.size()){return 0;}string s = to_string(x)+"#"+to_string(y);//如果m中存了x到y的最短路径,直接返回if (m[s]){return m[s];}//否则:进行查找//顺时针int x1 = x;int count1 = 1;while (ring[x1] != key[y]){x1++;count1++;if (x1 == len){x1 = 0;}}int sum1 = dfs(ring, x1, key, y+1) + count1;//逆时针int count2 = 1;int x2 = x;while (ring[x2] != key[y]){x2--;count2++;if (x2 == -1){x2 = len - 1;}}int sum2 = dfs(ring, x2, key, y+1) + count2;m[s] = min(sum1, sum2);return min(sum1, sum2);
}int findRotateSteps(string ring, string key)
{return dfs(ring, 0, key, 0);
}

Leetcode每日一题:514.freedom-trail(自由之路)相关推荐

  1. 【Leetcode 每日一题】514. 自由之路(BFS+优先队列)

    Leetcode 每日一题 题目链接:514. 自由之路 难度: 困难 解题思路: 这道题乍一看,可以选择用动态规划或者BFS来求解.本文使用BFS来进行解答.注意到题中有一个最小的到路径.所以我们可 ...

  2. leetcode每日刷题计划-简单篇day8

    leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...

  3. Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)

    思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...

  4. 【LeetCode每日一题】1723. 完成所有工作的最短时间

    [LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...

  5. leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用

    leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...

  6. LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色

    LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...

  7. 【LeetCode每日一题】——109.有序链表转换二叉搜索树

    文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...

  8. leetcode每日一题·救生艇问题(Python)

    leetcode每日一题·救生艇问题(Python) 问题描述 题目入口 题目思路 首先分析问题,一个船最多坐两人,因此我们可以把这个问题看作两两组合的问题,并且如果最重的那个人和最轻的人加起来大于l ...

  9. LeetCode每日一题——904. 水果成篮

    LeetCode每日一题系列 题目:904. 水果成篮 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整 ...

  10. LeetCode每日一题打卡组队监督!刷题群!

    近 2000 人已经加入共同刷题啦! 群友每天都会在群里给大家讲解算法题 每周日「负雪明烛」组织直播讲题 我相信来看我博客的大部分人都是通过LeetCode刷题过来的.最近发现LeetCode中文网站 ...

最新文章

  1. 公告:Rover's Official Blog停止更新
  2. 【错误记录】IntelliJ IDEA 中右键点击源码目录选择 New 选项 没有创建 Java Class 选项 ( 将对应的源码目录标记为 Sources 选项 )
  3. springboot中controller单例模式多线程安全的简单理解
  4. 访问数据段时的特权级检查,修改SS时的特权级检查——《x86汇编语言:从实模式到保护模式》读书笔记30
  5. 故障恢复 stm32_硬件编程:77条STM32知识汇总
  6. 吴钩:打开宋代的“隐藏玩法”
  7. C++: new是否进行初始化的问题
  8. 太阳直射点纬度计算公式_全纬度昼夜长短通用公式
  9. 如何用命令行写java程序_如何用java实现doc命令行
  10. C#如何直接调用非托管代码
  11. 如何修改订单金额实现 0.01 元买 iPhone X?
  12. Linux 远程连接工具 【vnc viewer】 图形界面
  13. 人脸方向学习(五):Face Recognition-ArcFace解读
  14. 吉林大学超星MOOC高级语言程序设计 实验06 (2021级)
  15. sip网络电话 用户一直注册超时无法注册成功
  16. java ssm基于springboot的设备巡检系统
  17. 【程序员的吃鸡大法】利用OCR文字识别+百度算法搜索,玩转冲顶大会、百万英雄、芝士超人等答题赢奖金游戏...
  18. 解决word中公式插入后行间距变大,和文字不统一的问题
  19. 一级计算机考试电子表格排序筛选,重新应用Excel排序和筛选或清除筛选
  20. C语言判断关系R是否为自反关系

热门文章

  1. java自定义注解解析
  2. UVa 808 (建坐标系、找规律) Bee Breeding
  3. ehcache版本冲突
  4. [Windows核心编程]堆
  5. hdu 2149+hdu 1846(巴什博弈)
  6. CLR_via_C#.3rd 翻译[25.9 线程调度和优先权]
  7. 【原创】大叔问题定位分享(11)Spark中对大表子查询加limit为什么会报Broadcast超时错误...
  8. poj 1273 最大流
  9. ASP.NET Web开发框架之八 所有ERP部分的源代码全部开放下载
  10. HDOJ 1286 HDU 1286 找新朋友 ACM 1286 IN HDU