File tree 1 file changed +52
-0
lines changed
1 file changed +52
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ fun numEnclaves (grid : Array <IntArray >): Int {
3
+ val rows = grid.size
4
+ val cols = grid[0 ].size
5
+ val dirs = arrayOf(
6
+ intArrayOf(1 , 0 ),
7
+ intArrayOf(- 1 , 0 ),
8
+ intArrayOf(0 , 1 ),
9
+ intArrayOf(0 , - 1 )
10
+ )
11
+
12
+ val visited = Array (rows){BooleanArray (cols)}
13
+
14
+ fun isValid (r : Int , c : Int ) =
15
+ r in (0 until rows) &&
16
+ c in (0 until cols) &&
17
+ visited[r][c] == false &&
18
+ grid[r][c] == 1
19
+
20
+ fun isValidBorder (r : Int , c : Int ) =
21
+ (r == 0 || r == rows - 1 || c == 0 || c == cols - 1 ) &&
22
+ visited[r][c] == false
23
+
24
+ fun dfs (r : Int , c : Int ): Int {
25
+ if (! isValid(r, c))
26
+ return 0
27
+
28
+ visited[r][c] = true
29
+
30
+ var res = 1
31
+ for ((dr, dc) in dirs) {
32
+ res + = dfs(r + dr, c + dc)
33
+ }
34
+
35
+ return res
36
+ }
37
+
38
+ var totalLand = 0
39
+ var borderLand = 0
40
+ for (r in 0 until rows) {
41
+ for (c in 0 until cols) {
42
+ totalLand + = grid[r][c]
43
+ if (grid[r][c] == 1 && isValidBorder(r, c)) {
44
+ borderLand + = dfs(r, c)
45
+ }
46
+ }
47
+ }
48
+
49
+ return totalLand - borderLand
50
+ }
51
+
52
+ }
You can’t perform that action at this time.
0 commit comments