From 271a22fb80481d7926fd7c44fd41db6815b8c55d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=E1=BB=93=20V=C4=83n=20H=C3=B2a?= <56647826+hovanhoa@users.noreply.github.com> Date: Thu, 10 Oct 2024 13:54:48 +0700 Subject: [PATCH] Time: 6 ms (34.85%), Space: 4 MB (34.24%) - LeetHub --- 0841-keys-and-rooms/0841-keys-and-rooms.go | 27 ++++++++++------------ 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/0841-keys-and-rooms/0841-keys-and-rooms.go b/0841-keys-and-rooms/0841-keys-and-rooms.go index 66bd38a..bb7286e 100644 --- a/0841-keys-and-rooms/0841-keys-and-rooms.go +++ b/0841-keys-and-rooms/0841-keys-and-rooms.go @@ -1,21 +1,18 @@ -func dfs(seen []bool, rooms[][]int, node int) { - seen[node] = true - for _, v := range rooms[node] { - if !seen[v] { - dfs(seen, rooms, v) - } - } -} - func canVisitAllRooms(rooms [][]int) bool { - seen := make([]bool, len(rooms)) - dfs(seen, rooms, 0) + visited := make(map[int]bool) + keys := []int{0} + for len(keys) > 0 { + newKeys := []int{} + for _, k := range keys { + if !visited[k] { + newKeys = append(newKeys, rooms[k]...) + } - for _, v := range seen { - if !v { - return false + visited[k] = true } + + keys = newKeys } - return true + return len(visited) == len(rooms) } \ No newline at end of file