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;
        }
    };
  • 相关阅读:
    jQuery制作焦点图(轮播图)
    mysql 存储引擎的选择
    linux 系统操作
    把网页转换成doc 格式的文件,方便用户下载PHP 方法
    多年级勾选
    zend studio 破解
    win7下安装Linux实现双系统全攻略
    【Linux】Linux中常用操作命令
    PHP xmapp 下面安装 Composer-Setup.exe
    ecshop中smarty比较操作符(eq,ne,neq)含义
  • 原文地址:https://www.cnblogs.com/lMonster81/p/10434031.html
Copyright © 2011-2022 走看看