홍수 채우기

2146 단어 leetcodetheabbiedsa
이미지는 m x n 정수 그리드image로 표현되며 여기서 image[i][j]는 이미지의 픽셀 값을 나타냅니다.

또한 sr , scnewColor 세 개의 정수가 제공됩니다. 픽셀image[sr][sc]에서 시작하여 이미지에 플러드 필을 수행해야 합니다.

플러드 필을 수행하려면 시작 픽셀과 시작 픽셀과 동일한 색상의 시작 픽셀에 4방향으로 연결된 모든 픽셀과 해당 픽셀에 4방향으로 연결된 모든 픽셀(동일한 색상)을 고려하십시오. 곧. 앞서 언급한 모든 픽셀의 색상을 newColor 로 바꿉니다.

플러드 필을 수행한 후 수정된 이미지를 반환합니다.

예 1:



입력: 이미지 = [[1,1,1],[1,1,0],[1,0,1]], sr = 1, sc = 1, newColor = 2
출력: [[2,2,2],[2,2,0],[2,0,1]]
설명: 위치가 (sr, sc) = (1, 1)(즉, 빨간색 픽셀)인 이미지의 중심에서 시작 픽셀(즉, 파란색 픽셀)과 동일한 색상의 경로로 연결된 모든 픽셀 새로운 색상으로 채색됩니다.
하단 모서리는 시작 픽셀에 4방향으로 연결되어 있지 않기 때문에 색상이 2가 아닙니다.

예 2:

입력: 이미지 = [[0,0,0],[0,0,0]], sr = 0, sc = 0, newColor = 2
출력: [[2,2,2],[2,2,2]]

제약:
  • m == image.length
  • n == image[i].length
  • 1 <= m, n <= 50
  • 0 <= image[i][j], newColor < 216
  • 0 <= sr < m
  • 0 <= sc < n

  • 해결책:

    class Solution:
        def ff(self, image: List[List[int]], i, j, newColor: int, currColor) -> List[List[int]]:
            m = len(image)
            n = len(image[0])
            if i >= 0 and j >= 0 and i < m and j < n and image[i][j] == currColor:
                image[i][j] = newColor
                self.ff(image, i - 1, j, newColor, currColor)
                self.ff(image, i + 1, j, newColor, currColor)
                self.ff(image, i, j - 1, newColor, currColor)
                self.ff(image, i, j + 1, newColor, currColor)
    
        def floodFill(self, image: List[List[int]], sr: int, sc: int, newColor: int, currColor = None) -> List[List[int]]:
            currColor = image[sr][sc]
            if currColor != newColor:
                self.ff(image, sr, sc, newColor, currColor)
            return image
    

    좋은 웹페이지 즐겨찾기