做网站seo,青岛个人接网站建设,wordpress评论是关闭还是开启,罗湖高端网站设计给定一个 row x col 的二维网格地图 grid #xff0c;其中#xff1a;grid[i][j] 1 表示陆地#xff0c; grid[i][j] 0 表示水域。
网格中的格子 水平和垂直 方向相连#xff08;对角线方向不相连#xff09;。整个网格被水完全包围#xff0c;但其中恰好有一个岛屿其中grid[i][j] 1 表示陆地 grid[i][j] 0 表示水域。
网格中的格子 水平和垂直 方向相连对角线方向不相连。整个网格被水完全包围但其中恰好有一个岛屿或者说一个或多个表示陆地的格子相连组成的岛屿。
岛屿中没有“湖”“湖” 指水域在岛屿内部且不和岛屿周围的水相连。格子是边长为 1 的正方形。网格为长方形且宽度和高度均不超过 100 。计算这个岛屿的周长。
来源力扣LeetCode 链接https://leetcode-cn.com/problems/island-perimeter 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。 方法一 官方答案遍历每个方格判断方格的四条边是否是边界或者与水域接触
class Solution {static int[] dx {0,0,-1,1};static int[] dy {1,-1,0,0};public int islandPerimeter(int[][] grid) {int res 0;int n grid.length;int m grid[0].length;for(int i 0;in;i){for(int j 0;jm;j){if(grid[i][j]1){int cnt 0;/*这个for语句是判断每个方格的四条边设计的k值不同代表的边不同*/for(int k 0;k4;k){int tx i dx[k];int ty j dy[k];if(tx0||txn||ty0||tym||grid[tx][ty]0){cnt;}}res cnt;}}}return res;}
}开头两个static数组和后文的
for(int k 0;k4;k){int tx i dx[k];int ty j dy[k];if(tx0||txn||ty0||tym||grid[tx][ty]0){cnt;}设计的很妙方法二 深度优先遍历
class Solution {static int[] dx {0,0,-1,1};static int[] dy {1,-1,0,0};public int islandPerimeter(int[][] grid) {int res 0;int n grid.length;int m grid[0].length;for(int i 0;in;i){for(int j 0;jm;j){if(grid[i][j]1){res dfs(i,j,n,m,grid);}}}return res;}public int dfs(int x,int y,int n,int m,int[][]grid){if(x0||xn||y0||ym||grid[x][y]0){return 1;}if(grid[x][y]2){return 0;}grid[x][y]2;int cnt 0;cnt dfs(x,y1,n,m,grid);cnt dfs(x,y-1,n,m,grid);cnt dfs(x1,y,n,m,grid);cnt dfs(x-1,y,n,m,grid);return cnt;}
}和题目岛屿的数量很像