File tree Expand file tree Collapse file tree 3 files changed +163
-0
lines changed
solution/0900-0999/0959.Regions Cut By Slashes Expand file tree Collapse file tree 3 files changed +163
-0
lines changed Original file line number Diff line number Diff line change @@ -279,6 +279,62 @@ func regionsBySlashes(grid []string) int {
279
279
}
280
280
```
281
281
282
+ #### JavaScript
283
+
284
+ ``` js
285
+ /**
286
+ * @param {string[]} grid
287
+ * @return {number}
288
+ */
289
+
290
+ function regionsBySlashes (grid ) {
291
+ const find = x => {
292
+ if (p[x] !== x) {
293
+ p[x] = find (p[x]);
294
+ }
295
+ return p[x];
296
+ };
297
+
298
+ const union = (a , b ) => {
299
+ const pa = find (a);
300
+ const pb = find (b);
301
+ if (pa !== pb) {
302
+ p[pa] = pb;
303
+ size-- ;
304
+ }
305
+ };
306
+
307
+ const n = grid .length ;
308
+ let size = n * n * 4 ;
309
+ const p = Array .from ({ length: size }, (_ , i ) => i);
310
+
311
+ for (let i = 0 ; i < n; i++ ) {
312
+ for (let j = 0 ; j < n; j++ ) {
313
+ const k = i * n + j;
314
+ if (i < n - 1 ) {
315
+ union (4 * k + 2 , (k + n) * 4 );
316
+ }
317
+ if (j < n - 1 ) {
318
+ union (4 * k + 1 , (k + 1 ) * 4 + 3 );
319
+ }
320
+ if (grid[i][j] === ' /' ) {
321
+ union (4 * k, 4 * k + 3 );
322
+ union (4 * k + 1 , 4 * k + 2 );
323
+ } else if (grid[i][j] === ' \\ ' ) {
324
+ union (4 * k, 4 * k + 1 );
325
+ union (4 * k + 2 , 4 * k + 3 );
326
+ } else {
327
+ union (4 * k, 4 * k + 1 );
328
+ union (4 * k + 1 , 4 * k + 2 );
329
+ union (4 * k + 2 , 4 * k + 3 );
330
+ }
331
+ }
332
+ }
333
+
334
+ return size;
335
+ }
336
+ ```
337
+
282
338
<!-- tabs:end -->
283
339
284
340
<!-- solution:end -->
Original file line number Diff line number Diff line change @@ -269,6 +269,62 @@ func regionsBySlashes(grid []string) int {
269
269
}
270
270
```
271
271
272
+ #### JavaScript
273
+
274
+ ``` js
275
+ /**
276
+ * @param {string[]} grid
277
+ * @return {number}
278
+ */
279
+
280
+ function regionsBySlashes (grid ) {
281
+ const find = x => {
282
+ if (p[x] !== x) {
283
+ p[x] = find (p[x]);
284
+ }
285
+ return p[x];
286
+ };
287
+
288
+ const union = (a , b ) => {
289
+ const pa = find (a);
290
+ const pb = find (b);
291
+ if (pa !== pb) {
292
+ p[pa] = pb;
293
+ size-- ;
294
+ }
295
+ };
296
+
297
+ const n = grid .length ;
298
+ let size = n * n * 4 ;
299
+ const p = Array .from ({ length: size }, (_ , i ) => i);
300
+
301
+ for (let i = 0 ; i < n; i++ ) {
302
+ for (let j = 0 ; j < n; j++ ) {
303
+ const k = i * n + j;
304
+ if (i < n - 1 ) {
305
+ union (4 * k + 2 , (k + n) * 4 );
306
+ }
307
+ if (j < n - 1 ) {
308
+ union (4 * k + 1 , (k + 1 ) * 4 + 3 );
309
+ }
310
+ if (grid[i][j] === ' /' ) {
311
+ union (4 * k, 4 * k + 3 );
312
+ union (4 * k + 1 , 4 * k + 2 );
313
+ } else if (grid[i][j] === ' \\ ' ) {
314
+ union (4 * k, 4 * k + 1 );
315
+ union (4 * k + 2 , 4 * k + 3 );
316
+ } else {
317
+ union (4 * k, 4 * k + 1 );
318
+ union (4 * k + 1 , 4 * k + 2 );
319
+ union (4 * k + 2 , 4 * k + 3 );
320
+ }
321
+ }
322
+ }
323
+
324
+ return size;
325
+ }
326
+ ```
327
+
272
328
<!-- tabs:end -->
273
329
274
330
<!-- solution:end -->
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {string[] } grid
3
+ * @return {number }
4
+ */
5
+
6
+ function regionsBySlashes ( grid ) {
7
+ const find = x => {
8
+ if ( p [ x ] !== x ) {
9
+ p [ x ] = find ( p [ x ] ) ;
10
+ }
11
+ return p [ x ] ;
12
+ } ;
13
+
14
+ const union = ( a , b ) => {
15
+ const pa = find ( a ) ;
16
+ const pb = find ( b ) ;
17
+ if ( pa !== pb ) {
18
+ p [ pa ] = pb ;
19
+ size -- ;
20
+ }
21
+ } ;
22
+
23
+ const n = grid . length ;
24
+ let size = n * n * 4 ;
25
+ const p = Array . from ( { length : size } , ( _ , i ) => i ) ;
26
+
27
+ for ( let i = 0 ; i < n ; i ++ ) {
28
+ for ( let j = 0 ; j < n ; j ++ ) {
29
+ const k = i * n + j ;
30
+ if ( i < n - 1 ) {
31
+ union ( 4 * k + 2 , ( k + n ) * 4 ) ;
32
+ }
33
+ if ( j < n - 1 ) {
34
+ union ( 4 * k + 1 , ( k + 1 ) * 4 + 3 ) ;
35
+ }
36
+ if ( grid [ i ] [ j ] === '/' ) {
37
+ union ( 4 * k , 4 * k + 3 ) ;
38
+ union ( 4 * k + 1 , 4 * k + 2 ) ;
39
+ } else if ( grid [ i ] [ j ] === '\\' ) {
40
+ union ( 4 * k , 4 * k + 1 ) ;
41
+ union ( 4 * k + 2 , 4 * k + 3 ) ;
42
+ } else {
43
+ union ( 4 * k , 4 * k + 1 ) ;
44
+ union ( 4 * k + 1 , 4 * k + 2 ) ;
45
+ union ( 4 * k + 2 , 4 * k + 3 ) ;
46
+ }
47
+ }
48
+ }
49
+
50
+ return size ;
51
+ }
You can’t perform that action at this time.
0 commit comments