• 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 }
  • 相关阅读:
    python中的字典
    python中的元组操作
    python中的列表
    python中的内建函数
    python中格式化字符串
    34 哈夫曼编码
    33 构造哈夫曼树
    32 哈夫曼树
    31 树和森林的遍历
    30 森林和二叉树的转化(二叉树与多棵树之间的关系)
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/7524276.html
Copyright © 2020-2023  润新知