1. 程式人生 > >LeetCode 695. 島嶼的最大面積(C、C++、python)

LeetCode 695. 島嶼的最大面積(C、C++、python)

給定一個包含了一些 0 和 1的非空二維陣列 grid , 一個 島嶼 是由四個方向 (水平或垂直) 的 1 (代表土地) 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。

找到給定的二維陣列中最大的島嶼面積。(如果沒有島嶼,則返回面積為0。)

示例 1:

[[0,0,1,0,0,0,0,1,0,0,0,0,0],
 [0,0,0,0,0,0,0,1,1,1,0,0,0],
 [0,1,1,0,1,0,0,0,0,0,0,0,0],
 [0,1,0,0,1,1,0,0,1,0,1,0,0],
 [0,1,0,0,1,1,0,0,1,1,1,0,0],
 [0,0,0,0,0,0,0,0,0,0,1,0,0],
 [0,0,0,0,0,0,0,1,1,1,0,0,0],
 [0,0,0,0,0,0,0,1,1,0,0,0,0]]

對於上面這個給定矩陣應返回 6。注意答案不應該是11,因為島嶼只能包含水平或垂直的四個方向的‘1’。

示例 2:

[[0,0,0,0,0,0,0,0]]

對於上面這個給定的矩陣, 返回 0

注意: 給定的矩陣grid 的長度和寬度都不超過 50。

C

void DFS(int** tmp,int row,int col,int* area,int m,int n)
{
    (*area)++;
    tmp[row][col]=2;
    if(row-1>=0 && 1==tmp[row-1][col])
    {
        DFS(tmp,row-1,col,area,m,n);
    }
    if(row+1<=m-1 && 1==tmp[row+1][col])
    {
        DFS(tmp,row+1,col,area,m,n);
    }
    if(col-1>=0 && 1==tmp[row][col-1])
    {
        DFS(tmp,row,col-1,area,m,n);
    }
    if(col+1<=n-1 && 1==tmp[row][col+1])
    {
        DFS(tmp,row,col+1,area,m,n);
    }   
}
int maxAreaOfIsland(int** grid, int gridRowSize, int gridColSize) 
{
    int m=gridRowSize;
    int n=gridColSize;
    if(0==m || 0==n)
    {
        return 0;
    }
    int area=0;
    int res=0;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(1==grid[i][j])
            {
                DFS(grid,i,j,&area,m,n);
                res=res>area?res:area;
                area=0;
            }
        }
    }
    return res;
}

C++

class Solution {
public:
    void DFS(vector<vector<int>>& tmp,int row,int col,int& area)
    {
        area++;
        tmp[row][col]=2;
        if(row-1>=0 && 1==tmp[row-1][col])
        {
            DFS(tmp,row-1,col,area);
        }
        if(row+1<=tmp.size()-1 && 1==tmp[row+1][col])
        {
            DFS(tmp,row+1,col,area);
        }
        if(col-1>=0 && 1==tmp[row][col-1])
        {
            DFS(tmp,row,col-1,area);
        }
        if(col+1<=tmp[0].size()-1 && 1==tmp[row][col+1])
        {
            DFS(tmp,row,col+1,area);
        }
    }
    int maxAreaOfIsland(vector<vector<int>>& grid) 
    {
        if(grid.empty() || grid[0].empty())
        {
            return 0;
        }
        int res=0;
        int area=0;
        int m=grid.size();
        int n=grid[0].size();
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(1==grid[i][j])
                {
                    DFS(grid,i,j,area);
                    res=max(res,area);
                    area=0;
                }
            }
        }
        return res;        
    }
};

C++法二

class Solution {
public:
    int DFS(vector<vector<int>>& tmp,int row,int col,int area)
    {
        area++;
        tmp[row][col]=2;
        if(row-1>=0 && 1==tmp[row-1][col])
        {
            area=DFS(tmp,row-1,col,area);
        }
        if(row+1<=tmp.size()-1 && 1==tmp[row+1][col])
        {
            area=DFS(tmp,row+1,col,area);
        }
        if(col-1>=0 && 1==tmp[row][col-1])
        {
            area=DFS(tmp,row,col-1,area);
        }
        if(col+1<=tmp[0].size()-1 && 1==tmp[row][col+1])
        {
            area=DFS(tmp,row,col+1,area);
        }
        return area;
    }
    int maxAreaOfIsland(vector<vector<int>>& grid) 
    {
        if(grid.empty() || grid[0].empty())
        {
            return 0;
        }
        int res=0;
        int area=0;
        int m=grid.size();
        int n=grid[0].size();
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(1==grid[i][j])
                {
                    area=DFS(grid,i,j,area);
                    res=max(res,area);
                    area=0;
                }
            }
        }
        return res;        
    }
};

python

class Solution:
    def DFS(self,tmp,row,col,area):
        tmp[row][col]=2
        area+=1
        if row-1>=0 and 1==tmp[row-1][col]:
            area=self.DFS(tmp,row-1,col,area)
        if row+1<=len(tmp)-1 and 1==tmp[row+1][col]:
            area=self.DFS(tmp,row+1,col,area)
        if col-1>=0 and 1==tmp[row][col-1]:
            area=self.DFS(tmp,row,col-1,area)
        if col+1<=len(tmp[0])-1 and 1==tmp[row][col+1]:
            area=self.DFS(tmp,row,col+1,area)       
        return area
    def maxAreaOfIsland(self, grid):
        """
        :type grid: List[List[int]]
        :rtype: int
        """
        if []==grid or [[]]==grid:
            return 0
        m=len(grid)
        n=len(grid[0])
        res=0
        area=0
        for i in range(m):
            for j in range(n):
                if 1==grid[i][j]:
                    area=self.DFS(grid,i,j,area)
                    res=max(res,area)
                    area=0
        return res