包含整数的二维矩阵 M 表示一个图片的灰度。你需要设计一个平滑器来让每一个单元的灰度成为平均灰度 (向下舍入) ,平均灰度的计算是周围的8个单元和它本身的值求平均,如果周围的单元格不足八个,则尽可能多的利用它们。
输入:
[[1,1,1],
[1,0,1],
[1,1,1]]
输出:
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
看到这个题目一开始没啥思路,只有暴力的想法。后来看到别人的思路发现非常神奇,涨姿势了。
首先可以用到的就是方向向量法。把需要操作的格子做成一个方向向量表,遍历向量表操作,同时加上筛选条件,选取需要的格子。代码如下:
class Solution {
public int[][] imageSmoother(int[][] M) {//方向向量法
int r = M.length;
int c = M[0].length;
int[][] dir = {
{-1,-1},{-1,0},{-1,1},{0,-1},{0,0},{0,1},{1,-1},{1,0},{1,1}};
int[][] res = new int[r][c];
for(int i = 0; i< r; i++)
for(int j = 0; j< c; j++)
{
int sum = 0;
int count = 0;
for(int[] d : dir)
{
int x = i +d[0];
int y = j +d[1];
if(x < 0 || x >= r ||

本文介绍了如何使用方向向量法对二维矩阵进行平滑处理,通过计算每个单元周围灰度的平均值(向下取整)来实现图片的平滑。讨论了两种方法,包括方向向量法和平滑小区域法,强调方向向量法在选择格子上的灵活性。
最低0.47元/天 解锁文章
1029

被折叠的 条评论
为什么被折叠?



