1 题目描述
2 解题思路
注意一点,如果第一个要渲染的点,颜色和要渲染成的颜色是一样的,那么我们直接返回。不然的话会死循环。
2.1 广度优先遍历
广搜是使用队列来实现的
class Solution:
def floodFill(self, image: List[List[int]], sr: int, sc: int, newColor: int) -> List[List[int]]:
row=len(image)
column=len(image[0])
color=image[sr][sc]
if(image[sr][sc]==newColor):
return image
#特判不需要任何修改的情况
image[sr][sc]=newColor
lst=[(sr,sc)]
while(lst):
print(lst)
tmp_x,tmp_y=lst.pop(0)
for x,y in [(tmp_x-1,tmp_y),(tmp_x+1,tmp_y),(tmp_x,tmp_y-1),(tmp_x,tmp_y+1)]:
if(x>=0 and x<row and y>=0 and y<column):
if(image[x][y]==color):
image[x][y]=newColor
lst.append((x,y))
return(image)
2.2 深度优先遍历
深搜是使用递归来实现的
class Solution:
def floodFill(self, image: List[List[int]], sr: int, sc: int, newColor: int) -> List[List[int]]:
row=len(image)
column=len(image[0])
color=image[sr][sc]
if(image[sr][sc]==newColor):
return image
#特判不需要渲染的情况
image[sr][sc]=newColor
def dfs(x,y):
for (i,j) in [(x-1,y),(x+1,y),(x,y-1),(x,y+1)]:
if(i>=0 and i < row and j>=0 and j<column):
if(image[i][j]==color):
image[i][j]=newColor
dfs(i,j)
dfs(sr,sc)
return image