zoukankan      html  css  js  c++  java
  • LeetCode Image Smoother

    原题链接在这里:https://leetcode.com/problems/image-smoother/description/

    题目:

    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个点加自己是否是boundary内,若在就更新sum, count++. 最后计算floor average.

    Time Complexity: O(m*n), m = M.length, n = M[0].length.

    Space: O(m*n), res size.

    AC Java:

     1 class Solution {
     2     public int[][] imageSmoother(int[][] M) {
     3         if(M == null || M.length == 0 || M[0].length == 0){
     4             return M;
     5         }
     6         
     7         int m = M.length;
     8         int n = M[0].length;
     9         int [][] res = new int[m][n];
    10         
    11         for(int i = 0; i<m; i++){
    12             for(int j = 0; j<n; j++){
    13                 int count = 0;
    14                 int sum = 0;
    15                 for(int iInc : new int[]{-1,0,1}){
    16                     for(int jInc : new int[]{-1,0,1}){
    17                         if(isValid(i+iInc, j+jInc, m, n)){
    18                             count++;
    19                             sum += M[i+iInc][j+jInc];
    20                         }
    21                     }
    22                 }
    23                 res[i][j] = sum/count;
    24             }
    25         }
    26         return res;
    27     }
    28     
    29     private boolean isValid(int i, int j, int m, int n){
    30         return i>=0 && i<m && j>=0 && j<n;
    31     }
    32 }
  • 相关阅读:
    WPF之感触
    C# WinForm 给DataTable中指定位置添加列
    MyEclipse 8.6 download 官方下载地址
    将博客搬至CSDN
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/7524276.html
Copyright © 2011-2022 走看看