-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path_0733FloodFill.java
More file actions
77 lines (75 loc) · 3.08 KB
/
_0733FloodFill.java
File metadata and controls
77 lines (75 loc) · 3.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package com.heatwave.leetcode.problems;
/**
* An image is represented by an m x n integer grid image where image[i][j] represents the pixel value of the image.
* <p>
* You are also given three integers sr, sc, and color. You should perform a flood fill on the image starting from the pixel image[sr][sc].
* <p>
* 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), and so on. Replace the color of all of the aforementioned pixels with color.
* <p>
* Return the modified image after performing the flood fill.
* <p>
*
* <p>
* Example 1:
* <p>
* <p>
* Input: image = [[1,1,1],[1,1,0],[1,0,1]], sr = 1, sc = 1, color = 2
* Output: [[2,2,2],[2,2,0],[2,0,1]]
* Explanation: From the center of the image with position (sr, sc) = (1, 1) (i.e., the red pixel), all pixels connected by a path of the same color as the starting pixel (i.e., the blue pixels) 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.
* Example 2:
* <p>
* Input: image = [[0,0,0],[0,0,0]], sr = 0, sc = 0, color = 0
* Output: [[0,0,0],[0,0,0]]
* Explanation: The starting pixel is already colored 0, so no changes are made to the image.
*
* <p>
* Constraints:
* <p>
* m == image.length
* n == image[i].length
* 1 <= m, n <= 50
* 0 <= image[i][j], color < 216
* 0 <= sr < m
* 0 <= sc < n
* <p>
* 来源:力扣(LeetCode)
* 链接:https://leetcode.cn/problems/flood-fill
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
*/
public class _0733FloodFill {
static class Solution {
public int[][] floodFill(int[][] image, int sr, int sc, int color) {
int[][] checked = new int[image.length][image[0].length];
for (int i = 0; i < image.length; i++) {
for (int j = 0; j < image[0].length; j++) {
checked[i][j] = 0;
}
}
recursiveFill(image, image[sr][sc], checked, sr, sc, color);
return image;
}
private void recursiveFill(int[][] image, int originColor, int[][] checked, int sr, int sc, int color) {
if (checked[sr][sc] == 1) {
return;
}
checked[sr][sc] = 1;
if (image[sr][sc] != originColor) {
return;
}
image[sr][sc] = color;
if (sr - 1 >= 0) {
recursiveFill(image, originColor, checked, sr - 1, sc, color);
}
if (sc - 1 >= 0) {
recursiveFill(image, originColor, checked, sr, sc - 1, color);
}
if (sr + 1 < image.length) {
recursiveFill(image, originColor, checked, sr + 1, sc, color);
}
if (sc + 1 < image[0].length) {
recursiveFill(image, originColor, checked, sr, sc + 1, color);
}
}
}
}