Leetcode PHP题解--D123 661. Image Smoother

98 阅读1分钟

D123 661. Image Smoother

题目链接

661. Image Smoother

题目分析

给定一个二维数组,每一项需要是其周围值的平均值向下取整。

思路

我的做法比较直接,获取周围的值,计算周围元素的个数及其值,取得平均值,填充进新数组就好了。

最终代码

<?php
class Solution {

    /**
     * @param Integer[][] $M
     * @return Integer[][]  
     */
    function imageSmoother($M) {
        $N = $M;
        foreach($N as $row => $v){
            foreach($v as $col => $v1){
                //upRow
                $suroundedValues = [
                    isset($M[$row-1][$col-1]) ? $M[$row-1][$col-1] : null,
                    isset($M[$row-1][$col  ]) ? $M[$row-1][$col  ] : null,
                    isset($M[$row-1][$col+1]) ? $M[$row-1][$col+1] : null,
                    
                    isset($M[$row  ][$col-1]) ? $M[$row  ][$col-1] : null,

                    isset($M[$row  ][$col+1]) ? $M[$row  ][$col+1] : null,
                    
                    isset($M[$row+1][$col-1]) ? $M[$row+1][$col-1] : null,
                    isset($M[$row+1][$col  ]) ? $M[$row+1][$col  ] : null,
                    isset($M[$row+1][$col+1]) ? $M[$row+1][$col+1] : null,
                ];
                
                $filteredValues = array_filter($suroundedValues, function($values){
                    return !is_null($values);
                });
                $filteredValues[] = $v1;
                $N[$row][$col] = floor(array_sum($filteredValues)/count($filteredValues));
            }
        }
        return $N;
    }
}

若觉得本文章对你有用,欢迎用爱发电资助。