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)