当前位置:网站首页>One question per day 1020 Number of enclaves

One question per day 1020 Number of enclaves

2022-07-05 06:12:00 A big pigeon

topic :

Give you a size of m x n The binary matrix of grid , among 0 Represents an ocean cell 、1 Represents a land cell .

once Move It refers to walking from one land cell to another ( On 、 Next 、 Left 、 Right ) Land cells or across grid The boundary of the .

Return to grid unable Land that leaves the grid boundary in any number of movements ( enclave ) The number of cells .

Explain : use 2 Mark the land you can leave .

First mark the outermost land 2. And then from 2 set out , Depth first search the surrounding land is marked 2.

Last grid The unmarked land in is the enclave .

class Solution:
    def numEnclaves(self, grid: List[List[int]]) -> int:
        def dfs(i,j):
            nonlocal grid,m,n
            if i<0 or j<0 or i>=m or j >=n :
                return 
            if grid[i][j]==1: 
                grid[i][j] = 2 # Departable land 
                dfs(i+1,j)
                dfs(i-1,j)
                dfs(i,j-1)
                dfs(i,j+1)
            return     
                
                

        m, n = len(grid), len(grid[0])
        cnt = 0
        for i in range(m):    
            grid[i][0] = 2 if grid[i][0] == 1 else 0
            grid[i][n-1] = 2 if grid[i][n-1] == 1 else 0
        for j in range(n):
            grid[0][j] = 2 if grid[0][j] == 1 else 0
            grid[m-1][j] = 2 if  grid[m-1][j] == 1 else 0
        for i in range(m):
            for j in range(n):
                if grid[i][j] == 2:
                    dfs(i+1,j)
                    dfs(i-1,j)
                    dfs(i,j-1)
                    dfs(i,j+1)
        
        for i in range(m):
            for j in range(n):
                if grid[i][j] == 1:
                    cnt += 1 

        return cnt

原网站

版权声明
本文为[A big pigeon]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140620422224.html