leetcode1020
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的更多相关文章
- [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 ...
随机推荐
- c语言中printf()函数中的参数计算顺序
今天看到了一个关于printf()函数计算顺序的问题,首先看一个例子: #include<stdio.h> int main() { printf("%d---%d---%d&q ...
- JVM异常之:栈溢出StackOverflowError
在java虚拟机规范中,虚拟机栈和本地方法栈都会出现StackOverflowError和OutofMemoryError,程序计数器是java虚拟机中唯一一块不会产生error的内存区域. 一.St ...
- WebStrom配置SVN服务
本文讲解了如何在公司内网通过代理使用WebStrom等软件连接外部svn服务器,重点在于如何配置网络. 网络设置 1.配置WebStrom软件公司内网网络环境.首先配置代理服务器,点击“file-&g ...
- 保存chrome主题背景的图片
chrome主题背景的图怎样可以保存下来? 在chrome地址栏中输入: chrome://theme/IDR_THEME_NTP_BACKGROUND?npebkpkiddfadallfhefpip ...
- [UE4]如何编译部署独立专用服务端(Standalone Dedicated Server)
这是论坛上对UE服务端功能的回答,意思是UE4提供了网游服务端所具备的特性,包括位移修正.物理碰撞检测.这些特性不是UE4才加入,早期UE版本就有了. https://answers.unrealen ...
- typescript可索引接口 类类型接口
/* 接口的作用:在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用.接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据, ...
- 打开package.json 查看node版本并修改本地node版本
- synchronous-request-with-websockets
https://stackoverflow.com/questions/13417000/synchronous-request-with-websockets
- 转 WiFi的STA和AP模式指什么?
1):AP,也就是无线接入点,是一个无线网络的创建者,是网络的中心节点.一般家庭或办公室使用的无线路由器就一个AP. 2):STA站点,每一个连接到无线网络中的终端(如笔记本电脑.PDA及其它可以联网 ...
- tomcat Error:NB:JAVA_HOME should point to a JDK not a JRE 解决方法
环境:win7 tomcata7.0解压版本 执行:service.bat install 报错:JAVA_HOME should point to a JDK not a JRE 网上找了几种解决方 ...