Leetcode--Java--463. 岛屿的周长

题目描述

给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] = 1 表示陆地, grid[i][j] = 0 表示水域。
岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。

样例描述

在这里插入图片描述

思路

FloodFill算法

  1. 求周长,可以转化为遍历过程中,如果越界或者碰到水,说明走不通就是周长,走的通就不是周长。
  2. 这里说了只有一个岛屿,所以不需要dfs。
  3. 越界和是水不能同时判断,因为越界数组的下标不存在,用来判断水会数组越界。

代码

class Solution {
    
    
    public int islandPerimeter(int[][] grid) {
    
    
       int m = grid.length, n = grid[0].length;
       int res = 0;
       int dx[] = new int[]{
    
    1, 0, -1, 0};
       int dy[] = new int[]{
    
    0, 1, 0, -1};
       for (int i = 0; i < m; i ++ ) {
    
    
           for (int j = 0; j < n; j ++ ) {
    
    
              if (grid[i][j] == 1) {
    
    
                  for (int d = 0; d < 4; d ++ ) {
    
    
                      int x = i + dx[d], y = j + dy[d];
                      //越界的话,就是周长,累计加一
                      if (x < 0 || x >= m || y < 0 || y >= n) {
    
    
                          res ++;
                      } //否则如果是水   
                      else if (grid[x][y] == 0) res ++;
                  }
              }
           }
       }
       return res;
    }
}

猜你喜欢

转载自blog.csdn.net/Sherlock_Obama/article/details/121203409
今日推荐