标签:newColor 渲染 int image dfs color 733 图像 像素点
题目描述
有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。
给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor,让你重新上色这幅图像。
为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点的颜色值改为新的颜色值。
最后返回经过上色渲染后的图像。
示例 1:
输入:
image = [[1,1,1],[1,1,0],[1,0,1]]
sr = 1, sc = 1, newColor = 2
输出: [[2,2,2],[2,2,0],[2,0,1]]
解析:
在图像的正中间,(坐标(sr,sc)=(1,1)),
在路径上所有符合条件的像素点的颜色都被更改成2。
注意,右下角的像素没有更改为2,
因为它不是在上下左右四个方向上与初始点相连的像素点。
注意:
image 和 image[0] 的长度在范围 [1, 50] 内。
给出的初始点将满足 0 <= sr < image.length 和 0 <= sc < image[0].length。
image[i][j] 和 newColor 表示的颜色值在范围 [0, 65535]内。
代码
package pid733;
public class Solution{
public int[][] floodFill(int[][] image,int sr,int sc,int newColor){
int color = image[sr][sc];
if(color!=newColor){
dfs(image,sr,sc,color,newColor);
}
return image;
}
public void dfs(int[][] image,int r,int c,int color,int newColor){
if(image[r][c] == color){
// dfs的全部代码写在此判断条件下,此判断条件限制dfs不走走过的路,因为遍历过的位置已经改变颜色,这避免了栈溢出。
image[r][c] = newColor;
if(r >= 1){
dfs(image,r-1,c,color,newColor);
}
if(c >= 1){
dfs(image,r,c-1,color,newColor);
}
if(r+1 <image.length){
dfs(image,r+1,c,color,newColor);
}
if(c+1 < image[0].length){
dfs(image,r,c+1,color,newColor);
}
}
}
}
标签:newColor,渲染,int,image,dfs,color,733,图像,像素点 来源: https://blog.csdn.net/qq_34087914/article/details/104887518
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。