「每日LeetCode」2021年7月7日

本文最后更新于:2023年3月19日 晚上

Lt661. 图片平滑器

661. 图片平滑器

包含整数的二维矩阵 M 表示一个图片的灰度。你需要设计一个平滑器来让每一个单元的灰度成为平均灰度  (向下舍入) ,平均灰度的计算是周围的 8 个单元和它本身的值求平均,如果周围的单元格不足八个,则尽可能多的利用它们。
示例 1:

1
2
3
4
5
6
7
8
9
10
11
12
输入:
[[1,1,1],
[1,0,1],
[1,1,1]]
输出:
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
解释:
对于点 (0,0), (0,2), (2,0), (2,2): 平均(3/4) = 平均(0.75) = 0
对于点 (0,1), (1,0), (1,2), (2,1): 平均(5/6) = 平均(0.83333333) = 0
对于点 (1,1): 平均(8/9) = 平均(0.88888889) = 0

注意:

  1. 给定矩阵中的整数范围为 [0, 255]。
  2. 矩阵的长和宽的范围均为  [1, 150]。

思路

遍历每一个点,再遍历这个点周围的八个点,计算平均数即可。

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
* @param {number[][]} img
* @return {number[][]}
*/
var imageSmoother = function (img) {
const res = [];
const getAvg = (i, j) => {
const arr = [-1, 0, 1];
let count = 0,
sum = 0;
for (const row of arr) {
for (const col of arr) {
const num = img[i + row] && img[i + row][j + col];
if (typeof num === "number") {
count++;
sum += num;
}
}
}
return Math.floor(sum / count);
};
for (let i = 0; i < img.length; i++) {
const temp = [];
for (let j = 0; j < img[i].length; j++) {
temp.push(getAvg(i, j));
}
res.push(temp);
}
return res;
};