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++进阶--逻辑常数和比特位常数(Logical constness vs Bitwise constness)
对于什么是const函数,有两种理解 Logical constness 实际的数据没有没修改,如下面程序中的vector v Bitwise constness 类的成员变量没有被修改,包括int ...
- 【转】探索 ConcurrentHashMap 高并发性的实现机制
原文链接:https://www.ibm.com/developerworks/cn/java/java-lo-concurrenthashmap/ <探索 ConcurrentHashMap ...
- svn 被锁住 冲突 Can't revert without reverting children
解决 执行以下命令 D:\development\work>svn rm –-keep-local D:\development\work\ohho\common\logic\backstage ...
- JS中模态窗口(showModalDialog)的详细使用
基本介绍: showModalDialog() (IE + 支持) showModelessDialog() (IE + 支持) window.showModalDialog() 方法用来创建一个显示 ...
- 敏捷软件开发——第8章 SRP:单一职责原则
第8章 SRP:单一职责原则 一个类应该只有一个发生变化的原因. 8.1 定义职责 在SRP中我们把职责定义为变化的原因.如果你想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责.同时,我 ...
- docker启动时报错Error response from daemon: driver failed programming external connectivity on endpoint *
公司服务器由于断电重启,部署在docker服务上的一些web服务需要重新开启容器, [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND C ...
- 【Laravel】 常用的artisan命令【原创】
全局篇 查看artisan命令 php artisan php artisan list 查看某个帮助命令 php artisan help make:model 查看laravel版本 ...
- c#day02
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace testmys ...
- Epic Games工程师分享:如何在移动平台上做UE4的UI优化?
转自:https://blog.csdn.net/debugconsole/article/details/79281290 随着技术的不断升级,高性能的引擎逐渐受到越来越多研发商的青睐,UE4就是其 ...
- RedHat使用Centos的yum仓库
RedHat使用Centos的yum仓库 卸载红帽yum源 [root@zhouwanchun ~]# rpm -qa | grep yum [root@zhouwanchun ~]# rpm -e ...