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

輸入:grid = [[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0]] 輸出:16 解釋:它的周長(zhǎng)是上面圖片中的 16 個(gè)黃色的邊
示例 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
思路分析
本題中,我們可以針對(duì)每一個(gè)值為1的單元格,它的上下左右每有一個(gè)值為0的單元格則島嶼的周長(zhǎng)加一。
我們可以簡(jiǎn)化計(jì)算,即針對(duì)每一個(gè)值為1的單元格,算出5分別減去每一個(gè)值為1的單元格和其上下左右單元格的值(因?yàn)槿绻搯卧駷閮?nèi)陸,則其和其上下左右單元格的值的和為5)。
該題的難度在于邊界的判定,我們?yōu)榍筮吔缗卸ê?jiǎn)化,可以在二維數(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島嶼的周長(zhǎng)示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Go題解島嶼周長(zhǎng)示例的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go語言編程學(xué)習(xí)golang配置golint
這篇文章主要為大家介紹了Go語言編程學(xué)習(xí)golang配置golint的過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11
Go語言開發(fā)瀏覽器視頻流rtsp轉(zhuǎn)webrtc播放
這篇文章主要為大家介紹了Go語言開發(fā)瀏覽器視頻流rtsp轉(zhuǎn)webrtc播放的過程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04

