Leetcode661.Image Smoother图片平滑器

包含整数的二维矩阵 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

注意:

  1. 给定矩阵中的整数范围为 [0, 255]。
  2. 矩阵的长和宽的范围均为 [1, 150]。

class Solution {
public:
    vector<vector<int> > imageSmoother(vector<vector<int> >& M) {
        vector<vector<int> > res;
        int r = M.size();
        if(r == 0)
            return res;
        int c = M[0].size();
        for(int i = 0; i < r; i++)
        {
            vector<int> temp;
            for(int j = 0; j < c; j++)
            {
                int cnt = 1;
                int sum = M[i][j];
                if(i - 1 >= 0 && j - 1 >= 0)
                {
                    cnt++;
                    sum += M[i - 1][j - 1];
                }
                if(i - 1 >= 0 && j >= 0)
                {
                    cnt++;
                    sum += M[i - 1][j];
                }
                if(i >= 0 && j - 1 >= 0)
                {
                    cnt++;
                    sum += M[i][j - 1];
                }
                if(i + 1 < r && j + 1 < c)
                {
                    cnt++;
                    sum += M[i + 1][j + 1];
                }
                if(i + 1 < r && j < c)
                {
                    cnt++;
                    sum += M[i + 1][j];
                }
                if(i < r && j + 1 < c)
                {
                    cnt++;
                    sum += M[i][j + 1];
                }
                if(i + 1 < r && j - 1 >= 0)
                {
                    cnt++;
                    sum += M[i + 1][j - 1];
                }
                if(i - 1 >= 0 && j + 1 < c)
                {
                    cnt++;
                    sum += M[i - 1][j + 1];
                }
                temp.push_back(sum / cnt);
            }
            res.push_back(temp);
        }
        return res;
    }
};
原文地址:https://www.cnblogs.com/lMonster81/p/10434032.html