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

猜你喜欢

转载自blog.csdn.net/qq_27060423/article/details/84900100