力扣661(java)-图片平滑器(简单)

题目:

图像平滑器 是大小为 3 x 3 的过滤器,用于对图像的每个单元格平滑处理,平滑处理后单元格的值为该单元格的平均灰度。

每个单元格的  平均灰度 定义为:该单元格自身及其周围的 8 个单元格的平均值,结果需向下取整。(即,需要计算蓝色平滑器中 9 个单元格的平均值)。

如果一个单元格周围存在单元格缺失的情况,则计算平均灰度时不考虑缺失的单元格(即,需要计算红色平滑器中 4 个单元格的平均值)。

给你一个表示图像灰度的 m x n 整数矩阵 img ,返回对图像的每个单元格平滑处理后的图像 。

输入:img = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[0, 0, 0],[0, 0, 0], [0, 0, 0]]
解释:
对于点 (0,0), (0,2), (2,0), (2,2): 平均(3/4) = 平均(0.75) = 0
对于点 (0,1), (1,0), (1,2), (2,1): 平均(5/6) = 平均(0.83333333) = 0
对于点 (1,1): 平均(8/9) = 平均(0.88888889) = 0

 

输入: img = [[100,200,100],[200,50,200],[100,200,100]]
输出: [[137,141,137],[141,138,141],[137,141,137]]
解释:
对于点 (0,0), (0,2), (2,0), (2,2): floor((100+200+200+50)/4) = floor(137.5) = 137
对于点 (0,1), (1,0), (1,2), (2,1): floor((200+200+50+200+100+100)/6) = floor(141.666667) = 141
对于点 (1,1): floor((50+200+200+200+200+100+100+100+100)/9) = floor(138.888889) = 138
 

提示:

m == img.length
n == img[i].length
1 <= m, n <= 200
0 <= img[i][j] <= 255

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/image-smoother
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

1.遍历数组,依次判断某个元素的上下左右每个元素是否存在,存在就记录数值;

2.遍历结束后计算平均值。

代码:

 1 class Solution {
 2     public int[][] imageSmoother(int[][] img) {
 3         //统计原数组的行和列
 4         int R = img.length;
 5         int C = img[0].length;
 6         //定义一个新数组
 7         int[][] res = new int[R][C];
 8         //循环数组
 9         for(int i = 0; i < R; i++){
10             for(int j = 0; j < C; j++){
11                 int count = 1;
12                 int sum = img[i][j];
13                  //判断左上方是否有元素
14                 if(i-1 >= 0 && j-1 >= 0){
15                     sum += img[i-1][j-1];
16                     count++;
17                 }
18                 //判断正上方是否有元素
19                 if(i-1 >= 0){
20                     sum += img[i-1][j];
21                     count++;
22                 }
23                 //判断右上方是否有元素
24                 if(i-1 >= 0 && j+1 < C){
25                     sum += img[i-1][j+1];
26                     count++;
27                 }
28                 //判断左边是否有元素
29                 if(j-1 >= 0){
30                     sum += img[i][j-1];
31                     count++;
32                 }
33                 //判断右边是否有元素
34                 if(j+1 < C){
35                     sum += img[i][j+1];
36                     count++;
37                 }
38                 //判断左下是否有元素
39                 if(i+1 < R && j-1 >= 0){
40                     sum += img[i+1][j-1];
41                     count++;
42                 }
43                 //判断正下方是否有元素
44                 if(i+1 < R){
45                     sum += img[i+1][j];
46                     count++;
47                 }
48                 //判断右下是否有元素
49                 if(i+1 < R && j+1 < C){
50                     sum += img[i+1][j+1];
51                     count++;
52                 }
53             res[i][j] = (sum / count);
54             }
55         }
56         return res;
57     }
58 }

 

posted on 2022-04-16 11:33  我不想一直当菜鸟  阅读(43)  评论(0编辑  收藏  举报