Skip to content

Commit 7d112f3

Browse files
committed
BricksFallingWhenHit803
1 parent b68af9c commit 7d112f3

1 file changed

Lines changed: 80 additions & 0 deletions

File tree

src/BricksFallingWhenHit803.java

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,5 +138,85 @@ public int top() {
138138
return sz[find(sz.length - 1)] - 1;
139139
}
140140
}
141+
142+
143+
/**
144+
* https://leetcode.com/problems/bricks-falling-when-hit/discuss/121072/Java-Solution
145+
*/
146+
public int[] hitBricks2(int[][] grid, int[][] hits) {
147+
if (hits.length == 0 || hits[0].length == 0) return null;
148+
removeHitBrick(grid, hits);
149+
markRemainBricks(grid);
150+
return searchFallingBrick(grid, hits);
151+
}
152+
153+
private void markRemainBricks(int[][] grid) {
154+
for (int i = 0; i < grid[0].length; i++) {
155+
deepSearch(grid, 0, i);
156+
}
157+
}
158+
159+
private void removeHitBrick(int[][] grid, int[][] hits) {
160+
for (int i = 0; i < hits.length; i++) {
161+
grid[hits[i][0]][hits[i][1]] = grid[hits[i][0]][hits[i][1]] - 1;
162+
}
163+
}
164+
165+
private int[] searchFallingBrick(int[][] grid, int[][] hits) {
166+
int[] result = new int[hits.length];
167+
for (int i = hits.length - 1; i >= 0; i--) {
168+
if (grid[hits[i][0]][hits[i][1]] == 0) {
169+
grid[hits[i][0]][hits[i][1]] = 1;
170+
if (isConnectToTop(grid, hits[i][0], hits[i][1])) {
171+
result[i] = deepSearch(grid, hits[i][0], hits[i][1]) - 1;
172+
} else {
173+
result[i] = 0;
174+
}
175+
}
176+
}
177+
return result;
178+
}
179+
180+
private boolean isConnectToTop(int[][] grid, int i, int j) {
181+
if(i == 0) return true;
182+
183+
if (i - 1 >= 0 && grid[i - 1][j] == 2) {
184+
return true;
185+
}
186+
if (i + 1 < grid.length && grid[i + 1][j] == 2) {
187+
return true;
188+
}
189+
if (j - 1 >= 0 && grid[i][j - 1] == 2) {
190+
return true;
191+
}
192+
if (j + 1 < grid[0].length && grid[i][j + 1] == 2) {
193+
return true;
194+
}
195+
return false;
196+
}
197+
198+
private int deepSearch(int[][] data, int row, int column) {
199+
int arrayRow = data.length;
200+
int arrayLine = data[0].length;
201+
int effectBricks = 0;
202+
if (row < 0 || row >= arrayRow) return effectBricks;
203+
if (column < 0 || column >= arrayLine) return effectBricks;
204+
if (data[row][column] == 1) {
205+
data[row][column] = 2;
206+
effectBricks = 1;
207+
effectBricks += deepSearch(data, row + 1, column);
208+
effectBricks += deepSearch(data, row - 1, column);
209+
effectBricks += deepSearch(data, row, column + 1);
210+
effectBricks += deepSearch(data, row, column - 1);
211+
}
212+
return effectBricks;
213+
}
214+
215+
216+
217+
218+
219+
220+
141221
}
142222

0 commit comments

Comments
 (0)