https://leetcode-cn.com/problems/island-perimeter/
描述
給定一個包含 0 和 1 的二維網格地圖,其中 1 表示陸地 0 表示水域。
網格中的格子水準和垂直方向相連(對角線方向不相連)。整個網格被水完全包圍,但其中恰好有一個島嶼(或者說,一個或多個表示陸地的格子相連組成的島嶼)。
島嶼中沒有“湖”(“湖” 指水域在島嶼内部且不和島嶼周圍的水相連)。格子是邊長為 1 的正方形。網格為長方形,且寬度和高度均不超過 100 。計算這個島嶼的周長。
示例 :
輸入:
[[0,1,0,0],
[1,1,1,0],
[0,1,0,0],
[1,1,0,0]]
輸出: 16
解釋: 它的周長是下面圖檔中的 16 個黃色的邊:
分析
由圖可知,島嶼的周長 = 陸地的個數 * 4 - 交界的個數 * 2。
于是可以暴力循環求解
var islandPerimeter = function(grid) {
let cross = 0, count = 0
grid.forEach((item, index) => {
item.forEach((i, key) => {
if (i === 1) {
let up = index - 1, left = key - 1
if (up >= 0 && grid[up][key] === 1) {
cross++
}
if (left >= 0 && grid[index][left] === 1) {
cross++
}
count++
}
})
})
return count * 4 - cross * 2
};
上面算交界時隻判斷了上和左,因為下和右再判斷的話其實是重複了,沒必要判斷。