美文网首页
463. 岛屿的周长

463. 岛屿的周长

作者: bangbang2 | 来源:发表于2020-07-15 13:54 被阅读0次
    image.png
    image.png

    为什么要对小岛进行沉没呢?
    如下图,一旦小岛形成一个循环,不沉没的话,会进入一个循环,count会不停的++


    image.png
    在本题中,如下图,小岛的点会向东南西北四个方向扩散,如果扩散到边界,那递归会结束,并返回一个1,即代表周长+1。如果小岛点扩散到水域点,递归也会结束,会返回一个1,周长也加1,会默认的将已经遍历的小岛点置为2,如果小岛点变为2,代表该点已经走过,会结束递归,并返回0

    然后将东南西北四个方向的值都加起来,就是周长


    image.png
    class Solution {
        public int islandPerimeter(int[][] grid) {
            int length=0;
            for(int i=0;i<grid.length;i++){
                for(int j=0;j<grid[0].length;j++){
                    if(grid[i][j]==1){
                        
                      length=dfs(i,j,grid);
                    }
                }
            }
            return length;
        }
      int  dfs(int i,int j,int[][] grid){
         
          if(i<0||i>grid.length-1||j<0||j>grid[0].length-1){//小岛向边界移动,周长会+1
              return 1;
          }
          if(grid[i][j]==0){//小岛向水域移动,周长也会+1
              return 1;
          }
          if(grid[i][j]==2){//状态变为2,代表刚刚被遍历完,不能再加1了
              return 0;
          }
         grid[i][j]=2;
         int length=dfs(i-1,j,grid)+dfs(i+1,j,grid)+dfs(i,j-1,grid)+dfs(i,j+1,grid);
         
          return length;
      }
    }
    

    相关文章

      网友评论

          本文标题:463. 岛屿的周长

          本文链接:https://www.haomeiwen.com/subject/oobdhktx.html