查询接待收待飞地数量失败_leetcode 1020. Number of Enclaves(飞地的数量)

这篇博客介绍了如何通过广度优先搜索(BFS)算法来解决二维数组中无法通过任何次数移动到达边界的土地单元格(飞地)的问题。作者首先将边界上的1转换为其他数字,然后通过BFS遍历并标记与边界相连的土地,最后统计未被标记为边界的1的数量,即为飞地的数量。示例中提供了具体的Python代码实现。
摘要由CSDN通过智能技术生成

Given a 2D array A, each cell is 0 (representing sea) or 1 (representing land)

A move consists of walking from one land square 4-directionally to another land square, or off the boundary of the grid.

Return the number of land squares in the grid for which we cannot walk off the boundary of the grid in any number of moves.

Example 1:

Input: [[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 isn't enclosed because its on the boundary.

Example 2:

Input: [[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.

Note:

1 <= A.length <= 500

1 <= A[i].length <= 500

0 <= A[i][j] <= 1

All rows have the same size.

注意:

边界上没有飞地,哪怕是1,也不是飞地。

和边界上的1连接的地,也不是飞地。

所以,面对这个情况,我的思路是BFS,可以先在边界上遍历,面对有1,把这个1变为除0和1以外的其他数字a,然后依次遍历,把与a连接的地(是1)变为a。最后再次遍历,统计1的个数。

python3代码:

class Solution:

def numEnclaves(self, A: List[List[int]]) -> int:

m, n = len(A), len(A[0])

q = []

dx = [1, -1, 0, 0]

dy = [0, 0, 1, -1]

for i in range(m):

if A[i][0] == 1:

A[i][0] = 2

if A[i][n-1] == 1:

A[i][n-1] = 2

for i in range(n):

if A[0][i] == 1:

A[0][i] = 2

if A[m-1][i] == 1:

A[m-1][i] = 2

for i in range(m):

for j in range(n):

if A[i][j] == 2: # 这个必须为2.。。。。。。

q.append((i, j))

while len(q):

Q = q.pop(0)

r, c = Q[0], Q[1]

for k in range(4):

x = r + dx[k]

y = c + dy[k]

if 0 <= x < m and 0 <= y < n and A[x][y] == 1:

A[x][y] = 2

q.append((x, y))

num = 0

for i in range(m):

for j in range(n):

if A[i][j] == 1:

num += 1

return num

注意别把q.append()弄成q.push(),不能把python和C++弄混,emmmmm。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值