Leetcode 661.图片平滑器

it2023-10-07  76

Leetcode 661.图片平滑器

图片平滑器

包含整数的二维矩阵 M 表示一个图片的灰度。你需要设计一个平滑器来让每一个单元的灰度成为平均灰度 (向下舍入) ,平均灰度的计算是周围的8个单元和它本身的值求平均,如果周围的单元格不足八个,则尽可能多的利用它们。

示例 1:

输入: [[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

注意:

给定矩阵中的整数范围为 [0, 255]。 矩阵的长和宽的范围均为 [1, 150]。 class Solution { /** *遍历每一个位置,该下标周围数据及自身数据的和,和周围数据的个数 */ public int[][] imageSmoother(int[][] M) { int row = M.length; int col = M[0].length; //用于记录下标数据周围数据的和 int[][] sums = new int[row][col]; //用于记录该下标和周围数据的个数 Deque<Integer> d = new ArrayDeque<>(); int sum = 0; int count = 1; for(int i = 0;i < row;i++){ for(int j = 0;j < col;j++){ if(i-1>=0 && j-1>=0) { sum+=M[i-1][j-1]; ++count; } if(i-1>=0 && j<col) { sum+=M[i-1][j]; ++count; } if(i-1>=0 && j+1<col) { sum+=M[i-1][j+1]; ++count; } if(j-1>=0) { sum+=M[i][j-1]; ++count; } if(j+1<col) { sum+=M[i][j+1]; ++count; } if(i+1<row && j-1>=0) { sum+=M[i+1][j-1]; ++count; } if(i+1<row && j<col) { sum+=M[i+1][j]; ++count; } if(i+1<row && j+1<col) { sum+=M[i+1][j+1]; ++count; } sums[i][j] = sum; d.add(count); sum = 0; count = 1; } } for(int i = 0;i < row;i++){ for(int j = 0;j < col;j++){ M[i][j] = (M[i][j] + sums[i][j]) / d.pollFirst(); } } return M; } }

执行结果: 通过 显示详情 执行用时:18 ms, 在所有 Java 提交中击败了7.59% 的用户 内存消耗:39.4 MB, 在所有 Java 提交中击败了93.37% 的用户

最新回复(0)