@@ -196,3 +196,58 @@ function isConnected(i, j, grid, dirs) {
196
196
}
197
197
return false
198
198
}
199
+
200
+ // another
201
+
202
+ /**
203
+ * @param {number[][] } grid
204
+ * @param {number[][] } hits
205
+ * @return {number[] }
206
+ */
207
+ const hitBricks = function ( grid , hits ) {
208
+ const m = grid . length ,
209
+ n = grid [ 0 ] . length ,
210
+ res = Array ( hits . length ) . fill ( 0 ) ,
211
+ dirs = [
212
+ [ - 1 , 0 ] ,
213
+ [ 1 , 0 ] ,
214
+ [ 0 , 1 ] ,
215
+ [ 0 , - 1 ] ,
216
+ ] ;
217
+ for ( let [ r , c ] of hits ) grid [ r ] [ c ] -= 1 ;
218
+
219
+ for ( let i = 0 ; i < n ; i ++ ) dfs ( grid , 0 , i , m , n , dirs ) ;
220
+
221
+ for ( let i = hits . length - 1 ; i >= 0 ; i -- ) {
222
+ const [ r , c ] = hits [ i ] ;
223
+ grid [ r ] [ c ] += 1 ;
224
+ if ( grid [ r ] [ c ] === 1 && connected ( grid , r , c , m , n , dirs ) ) {
225
+ res [ i ] = dfs ( grid , r , c , m , n , dirs ) - 1 ;
226
+ }
227
+ }
228
+
229
+ return res ;
230
+ } ;
231
+
232
+ function dfs ( grid , i , j , m , n , dirs ) {
233
+ if ( i < 0 || i >= m || j < 0 || j >= n || grid [ i ] [ j ] !== 1 ) return 0 ;
234
+ grid [ i ] [ j ] = 2 ;
235
+ let res = 1 ;
236
+ for ( let [ dr , dc ] of dirs ) {
237
+ res += dfs ( grid , i + dr , j + dc , m , n , dirs ) ;
238
+ }
239
+ return res ;
240
+ }
241
+
242
+ function connected ( grid , i , j , m , n , dirs ) {
243
+ if ( i === 0 ) return true ;
244
+ for ( let [ dr , dc ] of dirs ) {
245
+ const nr = i + dr ,
246
+ nc = j + dc ;
247
+ if ( nr >= 0 && nr < m && nc >= 0 && nc < n && grid [ nr ] [ nc ] === 2 )
248
+ return true ;
249
+ }
250
+
251
+ return false ;
252
+ }
253
+
0 commit comments