回溯+DFS 强化

1020. 飞地的数量

思路:从4条边界出发,把能遍历到的1全部变成0。剩下的1就是边界所不能到达的点,统计一下1的数量即可。

解题思路:DFS。  时间超越100%python用户提交 ,内存超越84.75%的python用户提交。

 1 class Solution(object):
 2     def numEnclaves(self, A):
 3         if not A or not A[0]:  # 处理边缘测试用例
 4             return 0
 5         res = 0
 6         self.m = len(A)
 7         self.n = len(A[0])
 8         for i in range(self.m):
 9             self.dfs(A, i, 0)   # 从左边界遍历
10             self.dfs(A, i, self.n-1)  # 从有边界遍历
11         for i in range(self.n):
12             self.dfs(A, 0, i)  # 从上边界遍历
13             self.dfs(A,self.m-1, i)  # 从上边界遍历
14         for each in A:
15             res += sum(each)   # 统计非零元素个数
16         return res
17 
18     def dfs(self, data, i, j):
19         if i < 0 or i >= self.m or j < 0 or j >= self.n or data[i][j]==0:
20             return
21         data[i][j] = 0
22         self.dfs(data, i+1, j)
23         self.dfs(data, i-1, j)
24         self.dfs(data, i, j+1)
25         self.dfs(data, i, j-1)

猜你喜欢

转载自www.cnblogs.com/xiaojiaojiao/p/10705392.html