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)

 思路2:添加辅助空间visit 。从边界出发,找出边界所能直达的1节点,然后用1的总个数减去边界直达1的个数。

时间超越100%的python用户提交,内存超越100%的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.count=0
 7         self.m = len(A)
 8         self.n = len(A[0])
 9         self.index=[[0,1],[1,0],[0,-1],[-1,0]]
10         self.visited=[[0]*len(A[0]) for x in range(self.m)]
11         for i in range(self.m):
12             self.dfs(A, i, 0)   # 从左边界遍历
13             self.dfs(A, i, self.n-1)  # 右边界遍历
14         for i in range(self.n):
15             self.dfs(A, 0, i)  # 从上边界遍历
16             self.dfs(A,self.m-1, i)  # 从上边界遍历
17         for each in A:
18             res += sum(each)   # 统计非零元素个数
19         return res-self.count
20 
21     def dfs(self, data, i, j):
22         if i<0 or i>=self.m or j<0 or j>=self.n or data[i][j]==0 or self.visited[i][j]==1:
23             return
24         if data[i][j] == 1:
25             self.visited[i][j]=1
26             self.count += 1
27         for each in self.index:
28             x = each[0]+i
29             y = j+each[1]
30             self.dfs(data,x,y)

 

posted on 2019-04-14 15:41  梦之幻璇  阅读(130)  评论(0编辑  收藏  举报