当前位置: 代码迷 >> 综合 >> LeetCode 661. Image Smoother
  详细解决方案

LeetCode 661. Image Smoother

热度:26   发布时间:2023-10-09 14:18:45.0

Image Smoother


题目描述:

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].

题目大意:

题目给定一个矩阵,更新每个元素的值,更新法则为:本身的值加上四周8个方向的元素求平均值。


题目代码:

class Solution {
public:vector<vector<int>> imageSmoother(vector<vector<int>>& M) {int dir[8][2] = {
   {0,1},{0,-1},{1,0},{-1,0},{1,1},{-1,-1},{1,-1},{-1,1}};vector<vector<int>> ans(M.size(),vector<int>(M[0].size()));for(int i = 0; i < M.size(); i++){for(int j = 0; j < M[0].size(); j++){int cnt = 1; ans[i][j] += M[i][j];for(int k = 0; k < 8; k++){int xx = i+dir[k][0];int yy = j+dir[k][1];if(xx < 0 || yy < 0 || xx >= M.size() || yy >= M[0].size()){continue;}cnt++;ans[i][j] += M[xx][yy];}ans[i][j] /= cnt;}}return ans;}
};


  相关解决方案