Explore >> Select a destination


You are here

bfontaine.net
| | blog.nuculabs.de
12.6 parsecs away

Travel
| | Hello, Here's my solution for the flood fill problem, found on LeetCode. If you want me to write about certain topics please let me know in the comments, thank you! Link to the problem: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 """ An image is represented by a 2-D array of integers, each integer representing the pixel value of the image (from 0 to 65535). Given a coordinate (sr, sc) representing the starting pixel (row and column) of the flood fill, and a pixel value newColor, "flood fill" the image. To perform a "flood fill", consider the starting pixel, plus any pixels connected 4-directionally to the starting pixel of the same color as the starting pixel, plus any pixels connected 4-directionally to those pixels (also with the same color as the starting pixel), and so on. Replace the color of all of the aforementioned pixels with the newColor. At the end, return the modified image. """ from typing import List, Tuple class Solution: def __init__(self): self.visited = set() def _set_pixel(self, image: List[List[int]], point: Tuple[int, int], value: int): try: image[point[0]][point[1]] = value except IndexError: pass def _get_pixel(self, image: List[List[int]], point: Tuple[int, int]): if point[0] < 0 or point[1] < 0: return None try: return image[point[0]][point[1]] except IndexError: return None def _floodFill(self, image: List[List[int]], point: Tuple[int, int], color: int, newColor: int) -> List[List[int]]: pixel = self._get_pixel(image, point) if pixel is not None and pixel == color and point not in self.visited: self.visited.add(point) self._set_pixel(image, point, newColor) self._floodFill(image, (point[0], point[1] + 1), color, newColor) self._floodFill(image, (point[0], point[1] - 1), color, newColor) self._floodFill(image, (point[0] + 1, point[1]), color, newColor) self._floodFill(image, (point[0] - 1, point[1]), color, newColor) def floodFill(self, image: List[List[int]], sr: int, sc: int, newColor: int) -> List[List[int]]: point = (sr, sc) pixel = self._get_pixel(image, point) self.visited = set() if pixel is not None: self._floodFill(image, point, pixel, newColor) return image if __name__ == '__main__': s = Solution() out = s.floodFill([[1,1,1],[1,1,0],[1,0,1]], 1, 1, 2) print("Output", out) assert out == [[2,2,2],[2,2,0],[2,0,1]] out = s.floodFill([[0,0,0],[0,0,0]], 0, 0, 2) print("Output", out) assert out == [[2,2,2],[2,2,2]] out = s.floodFill([[0,0,0],[0,1,1]], 1, 1, 1) print("Output", out) assert out == [[0, 0, 0], [0, 1, 1]]
| | florimond.dev
12.4 parsecs away

Travel
| | Type hints add optional static typing to Python 3.5+, and I love them. I now use annotated variables throughout my projects.
| | kishstats.com
11.3 parsecs away

Travel
| | Type hinting was added to the Python standard library starting in version 3.5. Python, being a dynamically typed language, does not enforce data types. Howev...
| | inventwithpython.com
71.6 parsecs away

Travel
| The short answer is: Python is interpreted. But it can also be considered compiled, both compiled and interpreted, and neither compiled nor interpreted. Read on to untangle these definitions.