Re: [閒聊] 每日leetcode已回收

看板Marginalman作者 (早瀬ユウカの体操服 )時間1年前 (2024/04/22 09:45), 編輯推噓2(200)
留言2則, 2人參與, 1年前最新討論串145/1552 (看更多)
https://leetcode.com/problems/open-the-lock/description 752. Open the Lock 給你一個四個位數的密碼鎖,每個密碼由一個0~9的輪型裝置表示,每次你可以把其中 一位數往上轉或往下轉,該密碼鎖初始化為0000,如果轉成 deadends 裡面的密碼時密碼 鎖會卡死,求出最少幾步可以讓我們把密碼轉成target,如果不可能就返回-1。 思路: 1.找最短路徑最簡單就bfs,每次我們都把四個位數分別往下轉和往上轉,看看是否最後 可以走到target,因為是bfs所以第一個碰到的一定最短step。 2.避免往回走用一個set紀錄走過的結果,deadends的值也可以丟進去。 3.如果走不到返回-1。 py code: ------------------------------------------- class Solution: def openLock(self, deadends: List[str], target: str) -> int: visited = set(deadends) # BFS q = deque() q.append(('0000', 0)) while q: curr_lock, step = q.popleft() if curr_lock == target: return step if curr_lock in visited: continue visited.add(curr_lock) for i in range(4): s1 = curr_lock[:i] + self.wheel_up(curr_lock[i]) + curr_lock[i + 1:] s2 = curr_lock[:i] + self.wheel_down(curr_lock[i]) + curr_lock[i + 1:] q.append((s1, step + 1)) q.append((s2, step + 1)) return -1 def wheel_up(self, lock: str): return '0' if lock == '9' else str(int(lock) + 1) def wheel_down(self, lock: str): return '9' if lock == '0' else str(int(lock) - 1) ------------------------------------------- -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.138.187.253 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1713750317.A.007.html

04/22 10:14, 1年前 , 1F
大濕
04/22 10:14, 1F

04/22 10:19, 1年前 , 2F
大師
04/22 10:19, 2F
文章代碼(AID): #1c9S4j07 (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1c9S4j07 (Marginalman)