分类:数组-二维数组及滚动数组
题目描述:
包含整数的二维矩阵 M 表示一个图片的灰度。你需要设计一个平滑器来让每一个单元的灰度成为平均灰度 (向下舍入) ,平均灰度的计算是周围的8个单元和它本身的值求平均,如果周围的单元格不足八个,则尽可能多的利用它们。
解题思路:
遍历矩阵
对于矩阵中的每一个单元格,找所有 9 个包括它自身在内的紧邻的格子。
然后,我们要将所有邻居的和保存在 ans[r][c] 中,同时记录邻居的数目 count。最终的答案就是和除以邻居数目。
1 class Solution: 2 def imageSmoother(self, img: List[List[int]]) -> List[List[int]]: 3 R,C=len(img),len(img[0]) #代表二维矩阵的行数和列数 4 ans = [[0] *C for _ in img] #生成二维矩阵大小的空数组,用来保存邻居的和 5 for i in range(R): #对于二维矩阵的每一行遍历 6 for j in range(C): #对于每一列 7 count = 0 #用来记录邻居的数目 8 for ni in (i-1,i,i+1): 9 for nj in (j-1,j,j+1): 10 if 0 <= ni < R and 0 <= nj < C: 11 ans[i][j] += img[ni][nj] 12 count +=1 13 ans[i][j] = int(ans[i][j]/count) #int是向下取整,ceil()是向上取整 14 return ans
复杂度分析
-
时间复杂度:O(N)O(N),其中 NN 是图片中像素的数目。我们需要将每个像素都遍历一遍。
-
空间复杂度:O(N)O(N),我们答案的大小。