zoukankan      html  css  js  c++  java
  • leetcode1020

     1 class Solution(object):
     2     def __init__(self):
     3         self.cons = 0
     4         self.S = list()
     5 
     6     def dfs(self,m,n,v,A):
     7         while len(self.S) > 0:
     8             cur = self.S.pop(-1)
     9             cur_x = cur[0]
    10             cur_y = cur[1]
    11             v[cur_x][cur_y] =  1
    12             self.cons += 1
    13 
    14             if cur_x > 0 and A[cur_x-1][cur_y]==1 and v[cur_x-1][cur_y] == 0:
    15                 self.S.append([cur_x-1,cur_y])
    16                 self.dfs(m,n,v,A)
    17 
    18             if cur_x < m - 1 and A[cur_x + 1][cur_y]==1 and v[cur_x + 1][cur_y]== 0:
    19                 self.S.append([cur_x+1,cur_y])
    20                 self.dfs(m,n,v,A)
    21 
    22             if cur_y > 0 and A[cur_x][cur_y-1]==1 and v[cur_x][cur_y-1]==0:
    23                 self.S.append([cur_x,cur_y-1])
    24                 self.dfs(m,n,v,A)
    25 
    26             if cur_y < n - 1 and A[cur_x][cur_y+1]==1 and v[cur_x][cur_y+1]==0:
    27                 self.S.append([cur_x,cur_y+1])
    28                 self.dfs(m,n,v,A)
    29 
    30 
    31         return 0
    32 
    33     def numEnclaves(self, A: 'List[List[int]]') -> int:
    34         row = len(A)
    35         coloum = len(A[0])
    36         visited =  [[0 for c in range(coloum)] for r in range(row)]
    37         sumsA = 0
    38         for i in range(row):
    39             for j in range(coloum):
    40                 sumsA += A[i][j]
    41         if sumsA == 0:
    42             return 0
    43         
    44         #first row and last row
    45         for i in [0,row-1]:
    46             for j in range(coloum):
    47                 if A[i][j] == 0 or visited[i][j] == 1:
    48                     continue
    49                 else:
    50                     self.S.append([i,j])
    51                     self.dfs(row,coloum,visited,A)
    52 
    53         #first coloum and last coloum
    54         for j in [0,coloum - 1]:
    55             for i in range(row):
    56                 if A[i][j] == 0 or visited[i][j] == 1:
    57                     continue
    58                 else:
    59                     self.S.append([i,j])
    60                     self.dfs(row,coloum,visited,A)
    61 
    62         return sumsA - self.cons

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

  • 相关阅读:
    面向对象实验 ——(二)类与对象
    [LeetCode] 957. Prison Cells After N Days
    [LeetCode] 32. Longest Valid Parentheses
    [LeetCode] 120. Triangle
    [LeetCode] 441. Arranging Coins
    [LeetCode] 79. Word Search
    [LeetCode] 1143. Longest Common Subsequence
    [LeetCode] 718. Maximum Length of Repeated Subarray
    [LeetCode] 332. Reconstruct Itinerary
    [LeetCode] 279. Perfect Squares
  • 原文地址:https://www.cnblogs.com/asenyang/p/10634487.html
Copyright © 2011-2022 走看看