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 面試題 | 島的周長面試題
- 最大島嶼面積
- 有關Developer的島嶼理論Developer
- 200. 島嶼數量
- 程式碼隨想錄day52 || 圖論搜尋 島嶼數量,島嶼的最大面積圖論
- [LintCode]NumberofIslands(島嶼個數)
- 【leetcode】劍指 Offer II 105. 島嶼的最大面積-【深度優先DFS】LeetCode
- 我用演算法學golang(島嶼的最大面積)演算法Golang
- 200、島嶼數量 | 演算法(leetcode,附思維導圖 + 全部解法)300題演算法LeetCode
- 我的島嶼我做主,沙盒經營建造遊戲《島與工廠》將於4月19日推出遊戲
- 領釦LintCode演算法問題答案-1225. 島的周長演算法
- 【力扣】島嶼數量(體會一下dfs和bfs思路的實質)力扣
- Leetcode976. 三角形的最大周長LeetCode
- 《紀念碑谷》工作室的新作,讓你用相機修復島嶼上的大自然
- 程式碼隨想錄演算法訓練營 | 200.島嶼的數量(dfs/bfs)演算法
- LeetCode每日一題: 三角形的最大周長(No.976)LeetCode每日一題
- 周長最長;及找到最大數分析
- 【leetcode】【java】【3、無重複字元的最長子串】LeetCodeJava字元
- 美五角大樓在廢棄島嶼展開針對電網的大型網路攻擊演習
- 螞蟻螞蟻;及周長最長分析
- C#--求圓的面積和周長C#
- 3201 圓的周長與面積
- Java 周曆日曆Java
- 學習Java的第四周Java
- 這是我的標題-森嶼白芷
- HDU 4667 Building Fence(求凸包的周長)UI
- 【LeetCode(Java) - 298】二叉樹最長連續序列LeetCodeJava二叉樹
- 幾周內搞定Java的10個方法Java
- 每日安全資訊:美五角大樓在廢棄島嶼展開針對電網的大型網路攻擊演習
- CAD面積周長同步測量
- Java課堂 第四周Java
- 學習Java第四周Java
- Java演算法面試題(005) 求n邊形周長的k等分點座標(今日頭條)Java演算法面試題
- 第2周專案2-長方柱類
- 從《中國式家長》到百景圖,椰島遊戲的破圈之路遊戲
- 迷失島