Title: Image SmootherSource: leetcode.com
Given a 2D integer matrix M representing the gray scale of an image, you need to design a smoother to make the gray scale of each cell becomes the average gray scale (rounding down) of all the 8 surrounding cells and itself. If a cell has less than 8 surrounding cells, then use as many as you can.
Example 1:
Input:
[[1,1,1],
[1,0,1],
[1,1,1]]
Output:
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
Explanation:
For the point (0,0), (0,2), (2,0), (2,2): floor(3/4) = floor(0.75) = 0
For the point (0,1), (1,0), (1,2), (2,1): floor(5/6) = floor(0.83333333) = 0
For the point (1,1): floor(8/9) = floor(0.88888889) = 0
Note:
1. The value in the given matrix is in the range of [0, 255].
2. The length and width of the given matrix are in the range of [1, 150].
Python solution
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 |
''' https://leetcode.com/problems/image-smoother/ ''' class Solution(object): def imageSmoother(self, M): """ :type M: List[List[int]] :rtype: List[List[int]] """ rows = len(M) cols = len(M[0]) b = [0] * cols output = [] for i in range(rows): output.append(b) b = [0] * cols for i in range(rows): for j in range(cols): if 0 < i < rows - 1: if 0 < j < cols - 1: s = M[i-1][j-1] + M[i-1][j] + M[i-1][j+1] + M[i][j-1] + M[i][j] + M[i][j+1] + M[i+1][j-1] + M[i+1][j] + M[i+1][j+1] output[i][j] = s/9 elif j == cols-1: s = M[i-1][j-1] + M[i-1][j] + M[i+1][j] + M[i][j-1] + M[i][j] + M[i + 1][j-1] output[i][j] = s/6 elif j == 0: s = M[i-1][j] + M[i][j] + M[i][j+1] + M[i-1][j+1] + M[i+1][j] + M[i+1][j+1] output[i][j] = s/6 elif i == rows - 1: if 0 < j < cols - 1: s = M[i-1][j-1] + M[i-1][j] + M[i-1][j+1] + M[i][j-1] + M[i][j] + M[i][j+1] output[i][j] = s/6 elif j == cols-1: s = M[i-1][j-1] + M[i-1][j] + M[i][j-1] + M[i][j] output[i][j] = s/4 elif j == 0: s = M[i][j] + M[i][j+1] + M[i-1][j] + M[i-1][j+1] output[i][j] = s/4 elif i == 0: if 0 < j < cols - 1: s = M[i+1][j-1] + M[i+1][j] + M[i+1][j+1] + M[i][j-1] + M[i][j] + M[i][j+1] output[i][j] = s/6 elif j == cols-1: s = M[i+1][j-1] + M[i+1][j] + M[i][j-1] + M[i][j] output[i][j] = s/4 elif j == 0: s = M[i][j] + M[i][j+1] + M[i+1][j] + M[i+1][j+1] output[i][j] = s/4 return output |