⭐️⭐️⭐️
# 題目敘述
You are given an m x n
binary matrix grid
, where 0
represents a sea cell and 1
represents a land cell.
A move consists of walking from one land cell to another adjacent (4-directionally) land cell or walking off the boundary of the grid
.
Return the number of land cells in grid
for which we cannot walk off the boundary of the grid in any number of moves.
# Example 1:
Input: grid = [[0,0,0,0],[1,0,1,0],[0,1,1,0],[0,0,0,0]]
Output: 3
Explanation: There are three 1s that are enclosed by 0s, and one 1 that is not enclosed because its on the boundary.
# Example 2:
Input: grid = [[0,1,1,0],[0,0,1,0],[0,0,1,0],[0,0,0,0]]
Output: 0
Explanation: All 1s are either on the boundary or can reach the boundary.
# 解題思路
# Solution
class Solution { | |
public int numEnclaves(int[][] grid) { | |
int m = grid.length; | |
int n = grid[0].length; | |
int ans = 0; | |
for (int i = 0; i < m; i++) { | |
for (int j = 0; j < n; j++) { | |
if ((i == 0 || j == 0 || i == m - 1 || j == n - 1) && grid[i][j] == 1) { | |
dfs(i, j, m, n, grid); | |
} | |
} | |
} | |
for (int i = 0; i < m; i++) { | |
for (int j = 0; j < n; j++) { | |
if (grid[i][j] == 1) { | |
ans++; | |
} | |
} | |
} | |
return ans; | |
} | |
public void dfs(int x, int y, int m, int n, int[][] grid) { | |
grid[x][y] = 0; | |
int[] dirx = { 0, 1, 0, -1 }; | |
int[] diry = { -1, 0, 1, 0 }; | |
for (int i = 0; i < 4; i++) { | |
int r = x + dirx[i]; | |
int c = y + diry[i]; | |
if (r >= 0 && r < m && c >= 0 && c < n && grid[r][c] == 1) { | |
dfs(r, c, m, n, grid); | |
} | |
} | |
} | |
} |
單字
** **
!! !!
片語 & 搭配詞
!! !!