输入:deadends 是指针终止状态列表,target 是希望到达的指针状态,初始化指针状态是0000。
输出:如果指针能够到达target状态,则变化的最少步骤是多少。如果不能到达target状态,返回-1。
分析:指针的状态有0000,0001,… 9999 ,1万种状态。可以看做是1万个节点。
  每个状态之间如果只有一个位置上的值有变化,则这两个状态之间有连线。例如节点0000,和1000,0100,0010,0001,9000,0900…等这些节点有联系。
  每个节点上的每一个位置有三种操作:减1,不变,加1。
  解决思路就是按照BFS的标准思路。先处理0000节点,接着处理与其相邻的节点,再依次扩散出去。
  本题目很影响效率的地方是节点一个位置坐加1,建1的操作变化。
  直接操作字符串,没有问题,只是会慢。

//变换for(int j=0;j<4;j++){int val = node.charAt(j)-48;int newVal = (val==9?0:val+1);int newVal1 = (val==0?9:val-1);String newNode = node.substring(0,j)+newVal+node.substring(j+1);if(!set.contains(newNode)){queue.offer(newNode);set.add(newNode);}String newNode1 = node.substring(0,j)+newVal1+node.substring(j+1);if(!set.contains(newNode1)){queue.offer(newNode1);set.add(newNode1);}}

还有一种思路是用二进制来做。链接。
   对于节点node=“1234”,先转为int。这个int有效位数是16位。这个int是这样的:
   0001 0010 0011 0100 ,依次表示1,2,3,4。
   如果需要将2变为3,则可以进行如下操作:

     int mask = (1 << 4) - 1;int[] num = new int[]{(nodeInt >> 12) & mask,(nodeInt >> 8) & mask,(nodeInt >> 4) & mask,nodeInt & mask};num[1] +=1;int res = 0;for (int i = 0; i <4 ; i++) {res <<= 4;res |= num[i];}

先使用掩码mask,把nodeInt的值分成4个值放到数组中。接着修改某一位置的值。最后再通过移位,做异或操作成为新的状态。这样速度就快很多。
代码

【Breadth-first Search 】752. Open the Lock相关推荐

  1. Taste/Thoth:Taste Architecture 概览【转Beyond Search】

    Taste 有着非常清晰的程序架构.看图说话,下面就是一个 User-based Recommender 的例图,说明了各个组件之间的关系.而对于一个 Item-based Recommender,除 ...

  2. 【Full text search】检索条件具有完整的关键词布尔逻辑运算AND、OR、NOT能力

    全文检索需求 1)系统提供模糊检索.分类搜索.高级复合搜索.全文检索.图片内容检索.跨库检索等多种检索途径: 2)支持字索引和词索引: 3)检索条件具有完整的关键词布尔逻辑运算AND.OR.NOT能力 ...

  3. 【Java并发编程】并发编程大合集

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17539599 为了方便各位网友学习以及方便自己复习之用,将Java并发编程系列内容系列内容 ...

  4. 【Matlab答题卡识别】hough变换答题卡判定与成绩统计【含GUI源码 752期】

    一.代码运行视频(哔哩哔哩) [Matlab答题卡识别]hough变换答题卡判定与成绩统计[含GUI源码 752期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [ ...

  5. 【全局路径规划】A*算法 A* Search Algorithm

    A Formal Basis for the Heuristic Determination of Minimum Cost Paths PETER E.HART NILS J. NILSSON BE ...

  6. 【数据结构(C语言)】数据结构-图

    图 文章目录 图 一.基本概念 1.图的定义 2.约定符号 3.分类 4.子图 5.路 6.其他术语 7.ADT 二.存储结构 1.邻接矩阵(数组) 2.邻接表 三.基本算法 1.遍历 2.求无向图的 ...

  7. 【每日一题】 959. 由斜杠划分区域

    [每日一题] 959. 由斜杠划分区域 避免每日太过咸鱼,一天搞定一道LeetCode算法题 一.题目描述 在由 1 x 1 方格组成的 N x N 网格 grid 中,每个 1 x 1 方块由 /. ...

  8. 【数据结构与算法】第二篇:算法部分

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.程序的时间和空间复杂度分析 (1)理解算法时间复杂度的表示法 ( ...

  9. 【FE前端学习】第二阶段任务-基础

    技能学习部分: 1.需要熟练掌握HTML标签以及CSS各个常用属性. 2.掌握CSS3 常用属性 3.掌握jquery的基本用法,对于JS基本逻辑语句需要熟练掌握 上文 [FE前端学习]第二阶段任务- ...

最新文章

  1. Python 二维数组
  2. 算法练习day19——190410(数组中重复的数字、替换空格、从尾到头打印链表)
  3. matlab函数表达式里分号_C语言表达式和语句
  4. .net:设计一个web应用
  5. Script:Generate A DDL Script For A Table
  6. (205)硬件实现多时钟设计
  7. 知名插画师描绘nova6“5G”潮乐园 十城nova6自拍互动装置即将引爆
  8. java第五章课后题_黑猴子的家:Java SE 练习题第五章
  9. java 设置sesion 生命周期
  10. Linux CAT与ECHO命令详解 <<EOF EOF
  11. C++类的静态成员函数
  12. php递归函数名字,php递归示例 php递归函数代码
  13. 微信聊天api接口调用代码
  14. 3dmax如何快速查找丢失贴图,并根据贴图快速找到对应物体
  15. 企业管理的六大关系和八大系统
  16. 幽默笑话大全 API 接口
  17. M1 mac外接显示器休眠后又失败
  18. mindspore| lenet模型 推理过程记录
  19. arm学习之基本汇编指令
  20. 使用铝、金、铜做电极的CCD摄像机

热门文章

  1. jq循环取数据 ,一直记不住,放到这
  2. Cpython解释器支持的进程与线程
  3. Hybrid框架UI重构之路:五、前端那点事儿(HTML、CSS)
  4. 单片机的 FIFO循环队列实现
  5. PHP中过滤数组中的元素
  6. C# java 有关“字节序”的描述 .
  7. java 电梯算法_编程之美之小飞的电梯调度算法(多种解法)---Java语言
  8. docker容器配置加速器
  9. npm run dev/build/serve
  10. java进程和线程_Java™ 教程(进程和线程)