博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
752. Open the Lock
阅读量:7040 次
发布时间:2019-06-28

本文共 3575 字,大约阅读时间需要 11 分钟。

You have a lock in front of you with 4 circular wheels. Each wheel has 10 slots: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'. The wheels can rotate freely and wrap around: for example we can turn '9' to be '0', or '0' to be '9'. Each move consists of turning one wheel one slot.

The lock initially starts at '0000', a string representing the state of the 4 wheels.

You are given a list of deadends dead ends, meaning if the lock displays any of these codes, the wheels of the lock will stop turning and you will be unable to open it.

Given a target representing the value of the wheels that will unlock the lock, return the minimum total number of turns required to open the lock, or -1 if it is impossible.

Example 1:

Input: deadends = ["0201","0101","0102","1212","2002"], target = "0202"Output: 6Explanation:A sequence of valid moves would be "0000" -> "1000" -> "1100" -> "1200" -> "1201" -> "1202" -> "0202".Note that a sequence like "0000" -> "0001" -> "0002" -> "0102" -> "0202" would be invalid,because the wheels of the lock become stuck after the display becomes the dead end "0102".

 

Example 2:

Input: deadends = ["8888"], target = "0009"Output: 1Explanation:We can turn the last wheel in reverse to move from "0000" -> "0009".

 

Example 3:

Input: deadends = ["8887","8889","8878","8898","8788","8988","7888","9888"], target = "8888"Output: -1Explanation:We can't reach the target without getting stuck.

 

Example 4:

Input: deadends = ["0000"], target = "8888"Output: -1

 

Note:

  1. The length of deadends will be in the range [1, 500].
  2. target will not be in the list deadends.
  3. Every string in deadends and the string target will be a string of 4 digits from the 10,000 possibilities '0000' to '9999'.

 关键词"...return the minimum total number of turns...", 需要用BFS,用两个queue,queue1当前层,queue2下一层。为避免重复,需要用哈希表存visited。

1 class Solution { 2 public: 3     int openLock(vector
& deadends, string target) { 4 unordered_set
deads(deadends.begin(),deadends.end()); 5 if(deads.find("0000")!=deads.end()){ 6 return -1; 7 } 8 int length = 0; 9 queue
queue1;10 queue
queue2;11 unordered_set
visited;12 queue1.push("0000");13 visited.insert("0000");14 while(!queue1.empty()){15 string curr = queue1.front();16 queue1.pop();17 if(curr==target){18 return length;19 }20 for(int i=0;i<4;i++){21 char old = curr[i];22 //next code by changing on ith digit23 curr[i] = (old-'0'+1)%10+'0';24 if(visited.find(curr)==visited.end()&&deads.find(curr)==deads.end()){ // new code25 queue2.push(curr);26 visited.insert(curr);27 }28 29 //previous code by changing on ith digit30 curr[i] = (old-'0'+9)%10+'0';31 if(visited.find(curr)==visited.end()&&deads.find(curr)==deads.end()){ // new code32 queue2.push(curr);33 visited.insert(curr);34 }35 36 //restore current code37 curr[i]=old;38 }39 40 if(queue1.empty()){41 queue1=queue2;42 queue
tmp;43 queue2=tmp;44 length++;45 }46 }47 48 return -1;49 }50 };

 

转载于:https://www.cnblogs.com/ruisha/p/9222513.html

你可能感兴趣的文章
jQuery动画详解
查看>>
3.移植驱动到3.4内核-移植DM9000C驱动
查看>>
Mysql 奇怪的连接错误
查看>>
给程序员简历的一些建议
查看>>
CSS3饼状loading效果
查看>>
docker日志
查看>>
Postman使用入门
查看>>
编程修养(一)
查看>>
Solidworks如何替换工程图参考零件
查看>>
2013年第四届蓝桥杯C/C++B组省赛题目解析
查看>>
重温.NET下Assembly的加载过程
查看>>
SpringBoot 之Spring Boot Starter依赖包及作用
查看>>
websocket 协议 使用
查看>>
微信小程序——自定义导航栏
查看>>
《JavaScript高级程序设计》笔记:DOM2和DOM3(十二)
查看>>
STM32 SYSTICK寄存器详解、描述
查看>>
Eclipse最全快捷键
查看>>
bmp转jpg(使用libjpeg)
查看>>
matlab练习程序(二值图像连通区域标记法,两步法)
查看>>
网络协议栈0:从一个例子开始
查看>>