Skip to content

Commit 96e744c

Browse files
authored
Create 1020-number-of-enclaves.kt
1 parent eb6612c commit 96e744c

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

Diff for: kotlin/1020-number-of-enclaves.kt

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
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+
}

0 commit comments

Comments
 (0)