题目:原题链接(中等)
标签:广度优先搜索、深度优先搜索
解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
---|---|---|---|
Ans 1 (Python) | O ( M × N ) O(M×N) O(M×N) | O ( M × N ) O(M×N) O(M×N) | 132ms (82.52%) |
Ans 2 (Python) | |||
Ans 3 (Python) |
解法一:
class Solution:
def colorBorder(self, grid: List[List[int]], r0: int, c0: int, color2: int) -> List[List[int]]:
m, n = len(grid), len(grid[0])
def _is_valid(x, y):
return 0 <= x < m and 0 <= y < n
def _get_neighbors(x1, y1):
return [(x2, y2) for (x2, y2) in [(x1 - 1, y1), (x1 + 1, y1), (x1, y1 - 1), (x1, y1 + 1)]
if _is_valid(x2, y2)]
color1 = grid[r0][c0]
need = set()
visited = {(r0, c0)}
queue = collections.deque([(r0, c0)])
while queue:
i1, j1 = queue.popleft()
neighbors = _get_neighbors(i1, j1)
# 如果(i1,j1)位于边缘
if len(neighbors) < 4:
need.add((i1, j1))
for i2, j2 in neighbors:
# 如果(i1,j1)与其他颜色相邻
if grid[i2][j2] != color1:
need.add((i1, j1))
continue
if (i2, j2) in visited:
continue
if grid[i2][j2] == color1:
visited.add((i2, j2))
queue.append((i2, j2))
for i, j in need:
grid[i][j] = color2
return grid