class Solution(object):
def __init__(self):
self.cons = 0
self.S = list() def dfs(self,m,n,v,A):
while len(self.S) > 0:
cur = self.S.pop(-1)
cur_x = cur[0]
cur_y = cur[1]
v[cur_x][cur_y] = 1
self.cons += 1 if cur_x > 0 and A[cur_x-1][cur_y]==1 and v[cur_x-1][cur_y] == 0:
self.S.append([cur_x-1,cur_y])
self.dfs(m,n,v,A) if cur_x < m - 1 and A[cur_x + 1][cur_y]==1 and v[cur_x + 1][cur_y]== 0:
self.S.append([cur_x+1,cur_y])
self.dfs(m,n,v,A) if cur_y > 0 and A[cur_x][cur_y-1]==1 and v[cur_x][cur_y-1]==0:
self.S.append([cur_x,cur_y-1])
self.dfs(m,n,v,A) if cur_y < n - 1 and A[cur_x][cur_y+1]==1 and v[cur_x][cur_y+1]==0:
self.S.append([cur_x,cur_y+1])
self.dfs(m,n,v,A) return 0 def numEnclaves(self, A: 'List[List[int]]') -> int:
row = len(A)
coloum = len(A[0])
visited = [[0 for c in range(coloum)] for r in range(row)]
sumsA = 0
for i in range(row):
for j in range(coloum):
sumsA += A[i][j]
if sumsA == 0:
return 0 #first row and last row
for i in [0,row-1]:
for j in range(coloum):
if A[i][j] == 0 or visited[i][j] == 1:
continue
else:
self.S.append([i,j])
self.dfs(row,coloum,visited,A) #first coloum and last coloum
for j in [0,coloum - 1]:
for i in range(row):
if A[i][j] == 0 or visited[i][j] == 1:
continue
else:
self.S.append([i,j])
self.dfs(row,coloum,visited,A) return sumsA - self.cons

解决思路是使用DFS,为了提高效率,只扫描外边框(第一行,最后一行,第一列,最后一列),并使用一个数组记录是否已经访问。

leetcode1020的更多相关文章

  1. [Swift]LeetCode1020. 飞地的数量 | Number of Enclaves

    Given a 2D array A, each cell is 0 (representing sea) or 1 (representing land) A move consists of wa ...

随机推荐

  1. 【Zabbix3.0】之入门到精通

    https://www.cnblogs.com/clsn/p/7885990.html 饿了么技术债 http://server.51cto.com/sOS-555999.htm

  2. PyQt4 对多个按钮进行同样的外观设置

    实现的效果: 正常状态下:黑底(背景色),白字(前景色),圆角,向外凸起: 鼠标停留:背景和前景都反色: 鼠标按下:背景色变为淡蓝色,向内凹陷:      class MyStyleSheet: @s ...

  3. vc++获取网页源码之使用import+智能指针包装类

    创建基于对话框的mfc应用程序 使用智能指针包装类IWinHttpRequestptr,它内部采用的是引用计数来管理对象的生命周期 代码: #import "C:\\Windows\\Sys ...

  4. 三星GT-N8010刷机教程

    本刷机教程只针对三星GT-N8010机器(以下简称GT-N8010),以下操作本人已在GT-N8010机器上亲测,且都成功,其它机器没有测试不能保证成功. 刷机有风险,请谨慎使用!请先备份资料和信息. ...

  5. P2871 手链

    传送 这个题的数据限制没有翻译出来,所以有可能产生爆内存现象 再此翻译一下:1<=n(物品个数)<=3402,1<=M(总重量)<=12880 (就这两个有点用) 显然这是一个 ...

  6. vue过渡

    vue在插入.更新或者移除DOM时,提供了多种不同方式的应用过渡效果,下面主要总结一些常用的过渡. 单元素过渡(vue1.0) 我们常用的动画是css3的动画,在vue中依旧有效. <!DOCT ...

  7. shell 发送所有内容到会话

    在shell当中 工具 发送键输入到所有会话 会有新的发现

  8. [UE4]游戏中服务器切换地图,控制台命令Execute console Command

    Execute console Command ServerTravel {地图名称}?listen 在服务器执行了这个命令,所有连接到该服务器的客户端都会跟着服务器同时切换到指定的地图. 1.创建一 ...

  9. 去掉user agent stylesheet 浏览器默认样式 [ 2.0 版本 ]

    今天在写一个网页的时候发现一个问题,我的table的样式很奇怪,也没有设置什么样式,跟其他的页面不一样,打开开发者工具一看,发现有这么点样式: 其中右上角:user agent stylesheet ...

  10. ipv6 操作

    netsh interface teredo set state disablednetsh interface ipv6 add v6v4tunnel interface=IP6Tunnel 120 ...