zoukankan      html  css  js  c++  java
  • 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;
        }
    };
  • 相关阅读:
    【shell】日志切割
    【PHP】SVN版本差异导出
    Linux服务器上安装JDK
    Linux 下node环境安装
    CentOS 7.3安装mariadb
    Centos 7.4 自动初始化docker环境,配置docker镜像仓库
    Shell 模板 (Yes or NO)
    Linux修改时间和时区
    lvm方式挂载盘及扩容
    安装ansible
  • 原文地址:https://www.cnblogs.com/lMonster81/p/10434032.html
Copyright © 2011-2022 走看看