領釦LintCode演算法問題答案-1225. 島的周長

二當家的白帽子發表於2020-10-07

領釦LintCode演算法問題答案-1225. 島的周長

1225. 島的周長

描述

給定一張用二維陣列表示的網格地圖,其中1表示陸地單元格,0表示水域單元格。網格地圖中的單元格視為水平/垂直相連(斜向不相連)。這個網格地圖四周完全被水域包圍著,並且其中有且僅有一個島(定義為一塊或多塊相連的陸地單元格)。這個島不包含湖(定義為不和外圍水域相連的水域單元格)。一個地圖單元格是邊長為1的一個正方形;網格地圖是一個矩形,並且它的長和寬不超過100。你要做的是求出這個島的周長。

樣例 1:

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

答案:16
說明:島的邊界為下圖中被標為黃色的邊,其周長即為16:

題解

public class Solution {
    /**
     * @param grid: a 2D array
     * @return: the perimeter of the island
     */
    public int islandPerimeter(int[][] grid) {
        // Write your code here
        if (grid == null) {
            return 0;
        }
        int ret = 0;
        for (int r = 0; r < grid.length; r++) {
            for (int c = 0; c < grid[0].length; c++) {
                if (grid[r][c] == 1) {

                    if (r == 0
                            || grid[r - 1][c] == 0) {
                        ret++;
                    }
                    if (c == 0
                            || grid[r][c - 1] == 0) {
                        ret++;
                    }
                    if (r + 1 == grid.length
                            || grid[r + 1][c] == 0) {
                        ret++;
                    }
                    if (c + 1 == grid[0].length
                            || grid[r][c + 1] == 0) {
                        ret++;
                    }
                }
            }
        }

        return ret;
    }
}

原題連結點這裡

鳴謝

非常感謝你願意花時間閱讀本文章,本人水平有限,如果有什麼說的不對的地方,請指正。
歡迎各位留言討論,希望小夥伴們都能每天進步一點點。

相關文章