每日leetcode-数组-661. 图片平滑器

分类:数组-二维数组及滚动数组

题目描述:

包含整数的二维矩阵 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),我们答案的大小。

原文地址:https://www.cnblogs.com/LLLLgR/p/14775030.html