島嶼的周長 --leetcode刷題,golang實現(xiàn)

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

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

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

示例 :

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

輸出: 16

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

island.png

解題思路:
雖然耗時長,內(nèi)存消耗大,但是是最容易想到的一種方式,遍歷切片,如果當前位置是島嶼,總算加4,檢查上下左右,如果有相鄰島嶼,則總數(shù) -1.
也可以簡化為只檢查右側(cè)和下面,如果右邊是島嶼,-2,如果下面是島嶼,-2,這樣只用判斷兩個方向,而不需要判斷四個方向了

代碼如下:

func islandPerimeter(grid [][]int) int {
    r, c := len(grid), len(grid[0])
    sum := 0
    for i, row := range grid {
        for j, v := range row {
            if v == 1 {
                sum += 4
                //下方同一列為陸地
                if i + 1 < r && grid[i + 1][j] == 1 {
                    sum -= 2
                }
                //右側(cè)相鄰位置為陸地
                if j + 1 < c && grid[i][j + 1] == 1 {
                    sum -= 2
                }
            }
        }
    }
    return sum
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容