解题过程
:::info
题目链接
图像平滑器 是大小为 3 x 3 的过滤器,用于对图像的每个单元格平滑处理,平滑处理后单元格的值为该单元格的平均灰度。
每个单元格的 平均灰度 定义为:该单元格自身及其周围的 8 个单元格的平均值,结果需向下取整。(即,需要计算蓝色平滑器中 9 个单元格的平均值)。
如果一个单元格周围存在单元格缺失的情况,则计算平均灰度时不考虑缺失的单元格(即,需要计算红色平滑器中 4 个单元格的平均值)。

给你一个表示图像灰度的 m x n 整数矩阵 img ,返回对图像的每个单元格平滑处理后的图像
:::
/*** @link https://leetcode.cn/problems/image-smoother/* @title 661. 图片平滑器* @description 图像平滑器 是大小为 3 x 3 的过滤器,用于对图像的每个单元格平滑处理,平滑处理后单元格的值为该单元格的平均灰度。* 每个单元格的 平均灰度 定义为:该单元格自身及其周围的 8 个单元格的平均值,结果需向下取整。(即,需要计算蓝色平滑器中 9 个单元格的平均值)。* 如果一个单元格周围存在单元格缺失的情况,则计算平均灰度时不考虑缺失的单元格(即,需要计算红色平滑器中 4 个单元格的平均值* 给你一个表示图像灰度的 m x n 整数矩阵 img ,返回对图像的每个单元格平滑处理后的图像* @param {number[][]} img* @return {number[][]}*/// 解法一:// 思路:当想不到没有任何技巧的时候,最传统和基础的思路穷举每一项边界值判断,就是有点费时间,不过培养了一点耐心,不急不躁,一点一滴的写完了var imageSmoother = function (img) {const res = [] // 新返回值const m = img.length // 矩阵长度mfor (let i = 0; i < img.length; i++) {const n = img[i].length // 矩阵长度nconst nums = [] // 重新计算后的 img[i] 数组for (let j = 0; j < img[i].length; j++) { // n// 列出当前单元格周围的元素索引位置可能性const num00 = i - 1 < 0 || j - 1 < 0 ? -1 : img[i - 1][j - 1]const num01 = i - 1 < 0 ? -1 : img[i - 1][j]const num02 = i - 1 < 0 || j + 1 >= n ? -1 : img[i - 1][j + 1]const num10 = j - 1 < 0 ? -1 : img[i][j - 1]const num12 = j + 1 >= n ? -1 : img[i][j + 1]const num30 = i + 1 >= m || j - 1 < 0 ? -1 : img[i + 1][j - 1]const num31 = i + 1 >= m ? -1 : img[i + 1][j]const num32 = i + 1 >= m || j + 1 >= n ? -1 : img[i + 1][j + 1]const numArr = [num00, num01, num02, num10, num12, num30, num31, num32]const newNumArr = numArr.filter(item => item !== -1)const numArrTotal = newNumArr.reduce((a, b) => a + b, 0)const avg = Math.floor((img[i][j] + numArrTotal) / (newNumArr.length + 1))nums.push(avg)}res.push(nums)}return res}// 解法二:// 💡待补充...// const result = imageSmoother([[1, 1, 1], [1, 0, 1], [1, 1, 1]]) // [[0, 0, 0],[0, 0, 0], [0, 0, 0]]const result = imageSmoother([[100, 200, 100], [200, 50, 200], [100, 200, 100]]) // [[137,141,137],[141,138,141],[137,141,137]]console.log(result)
解题感受
因为夜深了,脑子不好使了,也很困,所以一时间没有想到比较好的技巧解题,就用了传统思维穷举法来解决,等睡醒之后再慢慢优化一下解题技巧代码
