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)榍筮吔缗卸ê喕梢栽诙S數(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島嶼的周長示例詳解的詳細內(nèi)容,更多關(guān)于Go題解島嶼周長示例的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Golang http包構(gòu)建RESTful API的實現(xiàn)
在Go語言中實現(xiàn)RESTful API可以利用標準庫net/http提供的功能,它允許你輕松地創(chuàng)建和處理HTTP請求,本文主要介紹了Golang http包構(gòu)建RESTful API的實現(xiàn),感興趣的可以了解一下2024-01-01golang利用函數(shù)閉包實現(xiàn)簡單的中間件
中間件設(shè)計模式是一種常見的軟件設(shè)計模式,它在許多編程語言和框架中被廣泛應(yīng)用,這篇文章主要為大家介紹一下golang利用函數(shù)閉包實現(xiàn)一個簡單的中間件,感興趣的可以了解下2023-10-10gin解析json格式的數(shù)據(jù)出錯的處理方案
這篇文章主要介紹了gin解析json格式的數(shù)據(jù)出錯的處理方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03