Go語言題解LeetCode463島嶼的周長示例詳解
題目描述
原題鏈接 :
給定一個 row x col 的二維網(wǎng)格地圖 grid ,其中:grid[i][j] = 1 表示陸地, grid[i][j] = 0 表示水域。
網(wǎng)格中的格子 水平和垂直 方向相連(對角線方向不相連)。整個網(wǎng)格被水完全包圍,但其中恰好有一個島嶼(或者說,一個或多個表示陸地的格子相連組成的島嶼)。
島嶼中沒有“湖”(“湖” 指水域在島嶼內(nèi)部且不和島嶼周圍的水相連)。格子是邊長為 1 的正方形。網(wǎng)格為長方形,且寬度和高度均不超過 100 。計算這個島嶼的周長。
示例 1:

輸入:grid = [[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0]] 輸出:16 解釋:它的周長是上面圖片中的 16 個黃色的邊
示例 2:
輸入:grid = [[1]] 輸出:4
示例 3:
輸入:grid = [[1,0]] 輸出:4
提示:
row == grid.length
col == grid[i].length
1 <= row, col <= 100
grid[i][j] 為 0 或 1
思路分析
本題中,我們可以針對每一個值為1的單元格,它的上下左右每有一個值為0的單元格則島嶼的周長加一。
我們可以簡化計算,即針對每一個值為1的單元格,算出5分別減去每一個值為1的單元格和其上下左右單元格的值(因為如果該單元格為內(nèi)陸,則其和其上下左右單元格的值的和為5)。
該題的難度在于邊界的判定,我們?yōu)榍筮吔缗卸ê喕?,可以在二維數(shù)組grid數(shù)組周圍加上一圈值為0的圍墻,然后從[1,1]找到[hight+1][weight+1]。
AC 代碼
public class Solution {
public int IslandPerimeter(int[][] grid) {
int w = grid[0].Length;
int h = grid.Length;
int c = 0;
int[][] g = new int[h + 2][];
for (int i = 0; i < h + 2; i++)
{
g[i] = new int[w+2];
for (int j = 0; j <w + 2; j++)
{
if (i == 0 || j == 0 || i == h + 1 || j == w + 1)
g[i][j] = 0;
else
g[i][j] = grid[i - 1][j - 1];
}
}
for (int i = 1; i < h + 1; i++)
{
for (int j = 1; j <w + 1; j++)
{
if (g[i][j] == 1)
c += 5 - g[i][j] - g[i - 1][j] - g[i + 1][j] - g[i][j - 1] - g[i][j + 1];
}
}
return c;
}
}以上就是Go語言題解LeetCode463島嶼的周長示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Go題解島嶼周長示例的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go語言編程學(xué)習(xí)golang配置golint
這篇文章主要為大家介紹了Go語言編程學(xué)習(xí)golang配置golint的過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2021-11-11
Go語言開發(fā)瀏覽器視頻流rtsp轉(zhuǎn)webrtc播放
這篇文章主要為大家介紹了Go語言開發(fā)瀏覽器視頻流rtsp轉(zhuǎn)webrtc播放的過程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04

