1. 程式人生 > >leetcode 463. 島嶼的周長(Island Perimeter)

leetcode 463. 島嶼的周長(Island Perimeter)

內部 組成 沒有 () 它的 二維 lee ima 多個

目錄

  • 題目描述:
  • 示例 :
  • 解法:

題目描述:

給定一個包含 0 和 1 的二維網格地圖,其中 1 表示陸地 0 表示水域。

網格中的格子水平和垂直方向相連(對角線方向不相連)。整個網格被水完全包圍,但其中恰好有一個島嶼(或者說,一個或多個表示陸地的格子相連組成的島嶼)。

島嶼中沒有“湖”(“湖” 指水域在島嶼內部且不和島嶼周圍的水相連)。格子是邊長為 1 的正方形。網格為長方形,且寬度和高度均不超過 100 。計算這個島嶼的周長。

示例 :

輸入:
    [[0,1,0,0],
     [1,1,1,0],
     [0,1,0,0],
     [1,1,0,0]]
輸出: 
    16

解釋: 
    它的周長是下面圖片中的 16 個黃色的邊:
    技術分享圖片

解法:

class Solution {
public:
    int islandPerimeter(vector<vector<int>>& grid) {
        int m = grid.size();
        if(m == 0){
            return 0;
        }
        int n = grid[0].size();
        if(n == 0){
            return 0;
        }
        int res = 0;
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                if(grid[i][j] == 1){
                    res += 4;
                    if(i > 0 && grid[i-1][j] == 1){
                        res -= 2;
                    }
                    if(j > 0 && grid[i][j-1] == 1){
                        res -= 2;
                    }
                }
            }
        }
        return res;
    }
};

leetcode 463. 島嶼的周長(Island Perimeter)