LeetCode算法题-Image Smoother(Java实现)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了LeetCode算法题-Image Smoother(Java实现),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1843字,纯文字阅读大概需要3分钟。
内容图文
这是悦乐书的第282次更新,第299篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第150题(顺位题号是661)。给定表示图像灰度的2D整数矩阵M,您需要设计一个平滑器以使每个单元的灰度变为所有8个周围单元及其自身的平均灰度(向下舍入)。如果一个单元的周围单元少于8个,那么尽可能多地使用单元。例如:
输入:[[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):floor(3/4)= floor(0.75)= 0
对于点(0,1),(1,0),(1,2),(2,1):floor(5/6)= floor(0.83333333)= 0
对于点(1,1):floor(8/9)= floor(0.88888889)= 0
注意:
给定矩阵中的值在[0,255]的范围内。
给定矩阵的长度和宽度在[1,150]的范围内。
本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 解题
题目的意思是根据给定的二维数组,将其周围的相邻元素和其自身的值加起来算平均值,一次计算最多是9个单元格(包含自身)。题目所给的那个示例,M[0][0]这个元素只用算4个单元格元素的平均值即可,因为另外几个都是边界。所以,根据题目的意思,直接翻译过来就行,外面两层循环控制当前取哪个点展开计算,内层两层循环控制当前这个点需要计算周围那些相邻的单元格,算完平均值后,重新赋值即可。
public int[][] imageSmoother(int[][] M) {
if (M == null || M.length == 0 || M[0].length == 0) {
return M;
}
int row = M.length, col = M[0].length;
int[][] result = new int[row][col];
for (int i=0; i<row; i++) {
for (int j=0; j<col; j++) {
int count = 0;
int sum = result[i][j];
for (int k=i-1; k <= i+1; k++) {
for (int h=j-1; h <= j+1; h++) {
if (0 <= k && k < row && 0 <= h && h <col) {
sum += M[k][h];
count++;
}
}
}
result[i][j] = sum/count;
}
}
return result;
}
03 小结
算法专题目前已日更超过四个月,算法题文章150+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
内容总结
以上是互联网集市为您收集整理的LeetCode算法题-Image Smoother(Java实现)全部内容,希望文章能够帮你解决LeetCode算法题-Image Smoother(Java实现)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。