LeetCode 463. 島嶼的周長 JAVA
給定一個包含 0 和 1 的二維網格地圖,其中 1 表示陸地 0 表示水域。
網格中的格子水平和垂直方向相連(對角線方向不相連)。整個網格被水完全包圍,但其中恰好有一個島嶼(或者說,一個或多個表示陸地的格子相連組成的島嶼)。
島嶼中沒有“湖”(“湖” 指水域在島嶼內部且不和島嶼周圍的水相連)。格子是邊長為 1 的正方形。網格為長方形,且寬度和高度均不超過 100 。計算這個島嶼的周長。
示例 :
輸入:
[[0,1,0,0],
[1,1,1,0],
[0,1,0,0],
[1,1,0,0]]
輸出: 16
解釋: 它的周長是下面圖片中的 16 個黃色的邊:
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/island-perimeter
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
題解:從題目我們可以知道,一個陸地,如果某一個方向也是陸地,則會使得這片陸地的周長減一,以此為基礎點,我們可以利用深度搜尋找出島嶼的周長。
1、找到網格地圖中第一個陸地,進入深度搜尋;
2、一個陸地如果周圍都是水域的話,周長則為4,所以深度搜尋的話,我們需要找尋以這個陸地為中心的周圍陸地,如果找到一個陸地,周長則減1,如果這個陸地四周都被陸地包圍,則其周長為0;
3、如果一個陸地某個方向為陸地,且未曾深度搜尋過,則此方向的陸地進入深度搜尋;
4、最後將每一個陸地的周長相加,得到島嶼的周長返回即可。
class Solution {
int res;
public int islandPerimeter(int[][] grid) {
res=0;
boolean visit[][]=new boolean[grid.length][grid[0].length];
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[i].length;j++){
if(grid[i][j]==1){
visit[i][j]=true;
dfs(grid,visit,i,j);
return res;
}
}
}
return res;
}
public void dfs(int grid[][],boolean visit[][],int row,int col){
int sum=4;
if(row-1>=0&&grid[row-1][col]==1){
sum--;
if(visit[row-1][col]==false){
visit[row-1][col]=true;
dfs(grid,visit,row-1,col);
}
}
if(row+1<grid.length&&grid[row+1][col]==1){
sum--;
if(visit[row+1][col]==false){
visit[row+1][col]=true;
dfs(grid,visit,row+1,col);
}
}
if(col-1>=0&&grid[row][col-1]==1){
sum--;
if(visit[row][col-1]==false){
visit[row][col-1]=true;
dfs(grid,visit,row,col-1);
}
}
if(col+1<grid[0].length&&grid[row][col+1]==1){
sum--;
if(visit[row][col+1]==false){
visit[row][col+1]=true;
dfs(grid,visit,row,col+1);
}
}
res+=sum;
}
}
相關文章
- Leedcode-島嶼的周長
- 菜鳥扣程式碼第九天:leetcode463--島嶼的周長LeetCode
- 最大島嶼面積
- Facebook 面試題 | 島的周長面試題
- 200. 島嶼數量
- [LintCode]NumberofIslands(島嶼個數)
- 【leetcode】劍指 Offer II 105. 島嶼的最大面積-【深度優先DFS】LeetCode
- 程式碼隨想錄day52 || 圖論搜尋 島嶼數量,島嶼的最大面積圖論
- 200、島嶼數量 | 演算法(leetcode,附思維導圖 + 全部解法)300題演算法LeetCode
- 我用演算法學golang(島嶼的最大面積)演算法Golang
- 領釦LintCode演算法問題答案-1225. 島的周長演算法
- 創造屬於自己的島嶼 佛系養成《海島故事》6月5日發售
- 程式碼隨想錄演算法訓練營day51| 卡碼網99.島嶼數量 卡碼網100.島嶼的最大面積演算法
- Leetcode976. 三角形的最大周長LeetCode
- 我的島嶼我做主,沙盒經營建造遊戲《島與工廠》將於4月19日推出遊戲
- leetcode周賽 - 406LeetCode
- Leetcode周賽119LeetCode
- 【力扣】島嶼數量(體會一下dfs和bfs思路的實質)力扣
- LeetCode每日一題: 三角形的最大周長(No.976)LeetCode每日一題
- 程式碼隨想錄演算法訓練營 | 200.島嶼的數量(dfs/bfs)演算法
- 《紀念碑谷》工作室的新作,讓你用相機修復島嶼上的大自然
- 20241027LeetCode421周賽LeetCode
- 【leetcode 399 周賽】【題解】LeetCode
- LeetCode第215場周賽LeetCode
- 【leetcode】【java】【3、無重複字元的最長子串】LeetCodeJava字元
- 前端工程師的 LeetCode 之旅 -- 周賽 182前端工程師LeetCode
- 以《Alba》為例談談,如何完整打造出一座島嶼的環境生態?
- leetcode 第 217 場周賽(vivo)LeetCode
- 10個大陸、100個島嶼、1500萬字文字,《命運方舟》國服今夏全面開放
- [leetcode 第 400 場周賽]題解LeetCode
- 3201 圓的周長與面積
- 美五角大樓在廢棄島嶼展開針對電網的大型網路攻擊演習
- 【LeetCode(Java) - 298】二叉樹最長連續序列LeetCodeJava二叉樹
- 學習Java的第四周Java
- Leetcode 第136場周賽解題報告LeetCode
- 這是我的標題-森嶼白芷
- 求矩形周長與面積
- [LeetCode] 最短的橋 雙BFS JavaLeetCodeJava