• LeetCode 661. 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].

    题目标签:Array

      题目给了我们一个2d M array,让我们平滑处理图片。对于每一个cell,把它更新为 以自身为中心 3x3 的平均值。

      就用常规方法做,新设一个 res[][] array,遍历M,对于每一个cell, 遍历以它为中心的3x3的cells,得到平均值,存入res。

      需要注意的就是,3x3的边界问题。

    Java Solution:

    Runtime beats 72.97% 

    完成日期:10/19/2017

    关键词:Array

    关键点:处理3x3的边界问题

     1 class Solution 
     2 {
     3     public int[][] imageSmoother(int[][] M) 
     4     {
     5         int rows = M.length;
     6         int cols = M[0].length;
     7         int[][] res = new int[rows][cols];
     8         
     9         for(int i=0; i<rows; i++)
    10         {
    11             for(int j=0; j<cols; j++)
    12             {
    13                 int sum = 0;
    14                 int count = 0;
    15                 // sum 3x3 area and take care of the boundary
    16                 for(int x=Math.max(0,i-1); x<=Math.min(rows-1, i+1); x++)
    17                 {
    18                     for(int y=Math.max(0, j-1); y<=Math.min(cols-1, j+1); y++)
    19                     {
    20                         sum += M[x][y]; // sum up cells value
    21                         count++; // count cells number
    22                     }
    23                 }
    24                 
    25                 res[i][j] = sum / count; // get average value
    26             }
    27         }
    28         
    29         return res;
    30     }
    31 }

    参考资料:N/A

    LeetCode 题目列表 - LeetCode Questions List

  • 相关阅读:
    JAVA操作数据库 http://blog.sina.com.cn/andyfang
    JSP连接各类数据库大全
    Jigloo 开发 SWT 的入门教程
    kv离线升级
    MySQL内存表的弊端
    MySQL中Order By实现原理分析
    Linux安装性能问题
    按照经纬度实现位置计算
    NOSQL数据模型和CAP原理
    C语言 side effect 和 sequence point
  • 原文地址:https://www.cnblogs.com/jimmycheng/p/7697511.html
Copyright © 2020-2023  润新知