Flood Fill:搜索二维数组中相邻的相同元素并替换
2017-12-28 17:38
711 查看
An
value of the image (from 0 to 65535).
Given a coordinate
fill, and a pixel value
To perform a "flood fill", consider the starting pixel, plus any pixels connected 4-directionally to the starting pixel of the same color as the starting pixel, plus any pixels connected 4-directionally to those pixels (also with the same color as the starting
pixel), and so on. Replace the color of all of the aforementioned pixels with the newColor.
At the end, return the modified image.
Example 1:
Note:
The length of
be in the range
The given starting pixel will satisfy
The value of each color in
be an integer in
解释:就是类似于画图里颜色填充的那种,把二维数组中相邻且相同的元素替换成其他元素。
思路:递归遍历替换即可,注意边界,以及本身已经符合要求的颜色就无需替换的这种情况。
class Solution {
public void recursion(int[][] image, int precolor ,int targetcolor , int x,int y){
if(x < 0|| x >= image.length ) return ;
if(y < 0|| y >= image[0].length ) return ;
if(image[x][y]!=precolor) return ;
if(image[x][y]==targetcolor) return ;//原本就是同色,无序变动;这点要注意,易错
image[x][y] = targetcolor;
recursion(image,precolor ,targetcolor ,x+1,y);
recursion(image,precolor ,targetcolor ,x-1,y);
recursion(image,precolor ,targetcolor ,x,y+1);
recursion(image,precolor ,targetcolor ,x,y-1);
}
public int[][] floodFill(int[][] image, int sr, int sc, int newColor) {
if(sr < 0|| sr >= image.length ) return image;
if(sc < 0|| sc>= image[0].length ) return image;
int precolor = image[sr][sc];
recursion(image,precolor,newColor,sr,sc);
return image;
}
}
imageis represented by a 2-D array of integers, each integer representing the pixel
value of the image (from 0 to 65535).
Given a coordinate
(sr, sc)representing the starting pixel (row and column) of the flood
fill, and a pixel value
newColor, "flood fill" the image.
To perform a "flood fill", consider the starting pixel, plus any pixels connected 4-directionally to the starting pixel of the same color as the starting pixel, plus any pixels connected 4-directionally to those pixels (also with the same color as the starting
pixel), and so on. Replace the color of all of the aforementioned pixels with the newColor.
At the end, return the modified image.
Example 1:
Input: image = [[1,1,1],[1,1,0],[1,0,1]] sr = 1, sc = 1, newColor = 2 Output: [[2,2,2],[2,2,0],[2,0,1]] Explanation: From the center of the image (with position (sr, sc) = (1, 1)), all pixels connected by a path of the same color as the starting pixel are colored with the new color. Note the bottom corner is not colored 2, because it is not 4-directionally connected to the starting pixel.
Note:
The length of
imageand
image[0]will
be in the range
[1, 50].
The given starting pixel will satisfy
0 <= sr < image.lengthand
0 <= sc < image[0].length.
The value of each color in
image[i][j]and
newColorwill
be an integer in
[0, 65535].
解释:就是类似于画图里颜色填充的那种,把二维数组中相邻且相同的元素替换成其他元素。
思路:递归遍历替换即可,注意边界,以及本身已经符合要求的颜色就无需替换的这种情况。
class Solution {
public void recursion(int[][] image, int precolor ,int targetcolor , int x,int y){
if(x < 0|| x >= image.length ) return ;
if(y < 0|| y >= image[0].length ) return ;
if(image[x][y]!=precolor) return ;
if(image[x][y]==targetcolor) return ;//原本就是同色,无序变动;这点要注意,易错
image[x][y] = targetcolor;
recursion(image,precolor ,targetcolor ,x+1,y);
recursion(image,precolor ,targetcolor ,x-1,y);
recursion(image,precolor ,targetcolor ,x,y+1);
recursion(image,precolor ,targetcolor ,x,y-1);
}
public int[][] floodFill(int[][] image, int sr, int sc, int newColor) {
if(sr < 0|| sr >= image.length ) return image;
if(sc < 0|| sc>= image[0].length ) return image;
int precolor = image[sr][sc];
recursion(image,precolor,newColor,sr,sc);
return image;
}
}
相关文章推荐
- “像元分组” 算法:将二值图像中处于相邻的元素进行分组标号, 使得属于同一个分组的像元集合,其编号都相同
- 二分搜索专题2-在有序二维数组中搜索一个元素
- php实现搜索一维数组元素并删除二维数组对应元素的方法
- python中对二维数组每个元素进行相同操作,以平方为例
- PHP删除二维数组中相同元素及数组重复值的方法示例
- 二分搜索专题2-在有序二维数组中搜索一个元素
- IE6 BUG诡异的行内替换元素设置浮动并设置text-indent:xx px 影响相邻元素布局
- 关于二维数组相邻元素和的最大值问题的探讨
- 二维数组相同位置元素相加的和
- php合并两个二维数组,二维数组按键名排序,删除二维数组元素,二维数组按相同字段合并)
- 算法实验一:二分查找算法改进: 当搜索元素x不存在时,返回小于x的最大元素位置i和大于x的最小元素位置j. 当搜索元素在数组中时,i和j相同,均为x在数组中的位置。
- 去除相邻相同元素-算法
- java 过滤数组(把数组里面元素相同的元素替换为0)
- 12、一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。 请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。
- PHP 二维数组按相同的元素分类
- 转:二维数组相同位置元素相加的和
- 两个有序链表(相邻元素可能相同)找出他们交集,并把结果放到另一链表中
- 一维数组中搜索元素,删除二维数组元素
- php实现搜索一维数组元素并删除二维数组对应元素的方法
- php二维数组里相同元素的交集