LeetCode 開啟轉盤鎖 C

2021-09-25 13:06:21 字數 2900 閱讀 7653

題目鏈結

題目描述

你有乙個帶有四個圓形撥輪的轉盤鎖。每個撥輪都有10個數字:'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'。每個撥輪可以自由旋**例如把'9'變為'0''0'變為'9'。每次旋轉都只能旋轉乙個撥輪的一位數字。

鎖的初始數字為'0000',乙個代表四個撥輪的數字的字串。

列表deadends包含了一組死亡數字,一旦撥輪的數字和列表裡的任何乙個元素相同,這個鎖將會被永久鎖定,無法再被旋轉。

字串target代表可以解鎖的數字,你需要給出最小的旋轉次數,如果無論如何不能解鎖,返回 -1。

樣例1

輸入:deadends = [「0201」,「0101」,「0102」,「1212」,「2002」], target = 「0202」

輸出:6

解釋

可能的移動序列為 「0000」 -> 「1000」 -> 「1100」 -> 「1200」 -> 「1201」 -> 「1202」 -> 「0202」。

注意 「0000」 -> 「0001」 -> 「0002」 -> 「0102」 -> 「0202」 這樣的序列是不能解鎖的,

因為當撥動到 「0102」 時這個鎖就會被鎖定。

樣例2

輸入: deadends = [「8888」], target = 「0009」

輸出:1

解釋

把最後一位反向旋轉一次即可 「0000」 -> 「0009」。

樣例3

輸入: deadends = [「8887」,「8889」,「8878」,「8898」,「8788」,「8988」,「7888」,「9888」], target = 「8888」

輸出:-1

解釋

無法旋轉到目標數字且不被鎖定。

樣例4

輸入: deadends = [「0000」], target = 「8888」

輸出:-1

提示

死亡列表deadends的長度範圍為[1, 500]

目標數字target不會在deadends之中。

每個deadendstarget中的字串的數字會在 10,000個可能的情況'0000''9999'中產生。

解題思路

將初始字串看作二叉樹根節點,然後遍歷該節點子節點,如果符合要求咋加入佇列que,依次迴圈處理二叉樹每層節點,每處理一層路徑(長度)+1;最短路徑其實就是從初始節點到目標節點之間的層數遍歷。注意**中提到過的乙個坑~

**均有詳細注釋,不懂的地方可以cue我ღ( ´・ᴗ・` )ღ

以下是我碰到的一些問題:

關於c++容器部分提供乙個**可以學習。戳我戳我

初學者可能不懂vector初始化的方式,比如我嘻嘻嘻,不懂請戳

由於用到#include標頭檔案,編譯器報錯,this file requires compiler and library support for the \iso c++ 2011 standard. this support is currently experimental, and must be \enabled with the -std=c++11 or -std=gnu++11 compiler options.如果你也遇到了請繼續戳

#include

#include

#include

#include

#include

#include

using namespace std;

class solution

// 旋轉轉盤鎖

for(

int i=

0;i<

4;i++

)// 向左轉-1 0變9

temp[i]

=(top[i]

-'0'+9

)%10+

'0';

bool c =

(visited.

find

(temp)

==visited.

end())

; bool d =

(deadends_set.

find

(temp)

==deadends_set.

end())

;if(c && d)}}

cur++;}

return-1

;}};

intmain()

Leetcode 開啟轉盤鎖

原題 一道關於bfs的題目 先上 class solution object def openlock self,deadends,target 這裡轉為set類很有必要。deadends set deadends 先判斷是否是特殊情況。if 0000 in deadends or target i...

LeetCode 開啟轉盤鎖

q 你有乙個帶有四個圓形撥輪的轉盤鎖。每個撥輪都有10個數字 0 1 2 3 4 5 6 7 8 9 每個撥輪可以自由旋 例如把 9 變為 0 0 變為 9 每次旋轉都只能旋轉乙個撥輪的一位數字。鎖的初始數字為 0000 乙個代表四個撥輪的數字的字串。列表 deadends 包含了一組死亡數字,一旦...

開啟轉盤鎖

你有乙個帶有四個圓形撥輪的轉盤鎖。每個撥輪都有10個數字 0 1 2 3 4 5 6 7 8 9 每個撥輪可以自由旋 例如把 9 變為 0 0 變為 9 每次旋轉都只能旋轉乙個撥輪的一位數字。鎖的初始數字為 0000 乙個代表四個撥輪的數字的字串。列表 deadends 包含了一組死亡數字,一旦撥輪...