我們可以將 0000 到 9999 這 10000 狀態看成圖上的 10000 個節點,兩個節點之間存在一條邊,當且僅當這兩個節點對應的狀態只有 1 位不同,且不同的那位相差 1(包括 0 和 9 也相差 1 的情況),並且這兩個節點均不在陣列 deadends 中。那麼最終的答案即為 0000 到 target 的最短路徑。
破解密碼的問題就像是乙個樹搜尋的問題,把每一種一步變換的結果都放在該初狀態的子節點裡
(用deadends和visited進行剪枝,deadends用於去掉包含死路的解法,visited用於避免已經走過的路)
然後再去搜尋這個target,搜尋的深度就是最短的步數
可以用bfs來實現
classsolution
}//位上減一
for(int j=0;j<4;j++)}}
step++;
}return -1
; }
};
leetcode 752 開啟轉盤鎖
752.開啟轉盤鎖 你有乙個帶有四個圓形撥輪的轉盤鎖。每個撥輪都有10個數字 0 1 2 3 4 5 6 7 8 9 每個撥輪可以自由旋 例如把 9 變為 0 0 變為 9 每次旋轉都只能旋轉乙個撥輪的一位數字。鎖的初始數字為 0000 乙個代表四個撥輪的數字的字串。列表 deadends 包含了一...
開啟轉盤鎖(LeetCode 752)
你有乙個帶有四個圓形撥輪的轉盤鎖。每個撥輪都有10個數字 0 1 2 3 4 5 6 7 8 9 每個撥輪可以自由旋 例如把 9 變為 0 0 變為 9 每次旋轉都只能旋轉乙個撥輪的一位數字。鎖的初始數字為 0000 乙個代表四個撥輪的數字的字串。列表 deadends 包含了一組死亡數字,一旦撥輪...
leetcode 752 開啟轉盤鎖
目錄你的鼓勵也是我創作的動力 你有乙個帶有四個圓形撥輪的轉盤鎖。每個撥輪都有10個數字 0 1 2 3 4 5 6 7 8 9 每個撥輪可以自由旋 例如把 9 變為 0 0 變為 9 每次旋轉都只能旋轉乙個撥輪的一位數字。鎖的初始數字為 0000 乙個代表四個撥輪的數字的字串。列表 deadends...