队列&栈//图像渲染
有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 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]
内。
class Solution {
public int[][] floodFill(int[][] image, int sr, int sc, int newColor) {
if(image == null||sr >= image.length||sc >= image[0].length)
return image;
if(newColor == image[sr][sc])
return image;
change(image,sr,sc,image[sr][sc],newColor);
return image;
}
private void change(int[][]image, int row, int col, int oldColor, int newColor){
if(image == null||row >= image.length||col >= image[0].length||row < 0||col < 0||image[row][col] != oldColor){
return ;
}
image[row][col] = newColor;
change(image,row-1,col,oldColor,newColor);
change(image,row,col-1,oldColor,newColor);
change(image,row+1,col,oldColor,newColor);
change(image,row,col+1,oldColor,newColor);
}
}
class Solution {
public:
vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int newColor) {
int oldColor = image[sr][sc];
if(oldColor != newColor)
dfs(image,sr,sc,oldColor,newColor);
return image;
}
void dfs(vector<vector<int>>& image, int i, int j, int oldColor, int newColor){
int m = image.size();
int n = image[0].size();
if(i < 0 || i >= m || j < 0 || j >= n || image[i][j] != oldColor) return ;
image[i][j] = newColor;
dfs(image,i-1,j,oldColor,newColor);
dfs(image,i,j-1,oldColor,newColor);
dfs(image,i+1,j,oldColor,newColor);
dfs(image,i,j+1,oldColor,newColor);
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现