Skip to content

Commit 1aa8850

Browse files
authored
Create number-of-enclaves.cpp
1 parent 8aec589 commit 1aa8850

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

C++/number-of-enclaves.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Time: O(m * n)
2+
// Space: O(m * n)
3+
4+
class Solution {
5+
public:
6+
int numEnclaves(vector<vector<int>>& A) {
7+
for (int i = 0; i < A.size(); ++i) {
8+
dfs(&A, i, 0);
9+
dfs(&A, i, A[0].size() - 1);
10+
}
11+
for (int j = 1; j < A[0].size() - 1; ++j) {
12+
dfs(&A, 0, j);
13+
dfs(&A, A.size() - 1, j);
14+
}
15+
return accumulate(A.cbegin(), A.cend(), 0,
16+
[](int sum, const vector<int>& row) {
17+
return sum + accumulate(row.cbegin(), row.cend(), 0);
18+
});
19+
}
20+
21+
private:
22+
void dfs(vector<vector<int>> *A, int i, int j) {
23+
static const vector<pair<int, int>> directions{{0, 1}, {1, 0},
24+
{0, -1}, {-1, 0}};
25+
if (!(0 <= i && i < A->size() &&
26+
0 <= j && j < (*A)[0].size() &&
27+
(*A)[i][j])) {
28+
return;
29+
}
30+
(*A)[i][j] = 0;
31+
for (const auto& d : directions) {
32+
dfs(A, i + d.first, j + d.second);
33+
}
34+
}
35+
};

0 commit comments

Comments
 (0)