天津营销型网站建设公司,亚马逊跨境电商开店流程,网站原创内容,企业信息公示系统官网Java解决岛屿周长问题
01 题目
给定一个 row x col 的二维网格地图 grid #xff0c;其中#xff1a;grid[i][j] 1 表示陆地#xff0c; grid[i][j] 0 表示水域。
网格中的格子 水平和垂直 方向相连#xff08;对角线方向不相连#xff09;。整个网格被水完全包围其中grid[i][j] 1 表示陆地 grid[i][j] 0 表示水域。
网格中的格子 水平和垂直 方向相连对角线方向不相连。整个网格被水完全包围但其中恰好有一个岛屿或者说一个或多个表示陆地的格子相连组成的岛屿。
岛屿中没有“湖”“湖” 指水域在岛屿内部且不和岛屿周围的水相连。格子是边长为 1 的正方形。网格为长方形且宽度和高度均不超过 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.lengthcol grid[i].length1 row, col 100grid[i][j] 为 0 或 1
02 知识点
二维数组DFS遍历循环求解
03 我的题解
public class shuzu06 {public static void main(String[] args) {//测试数据int[][] gridnew int[][] {{0,1,0,0},{1,1,1,0},{0,1,0,0},{1,1,0,0}};System.out.println(numSpecial(grid));}
public static int numSpecial(int[][] grid) {int count0;//用于记录周长int row grid.length;//获取排数int col grid[0].length;//获取列数if (row1col1) {count4;//当只有一格时返回周长4return count;}for (int i 0; i row; i) {//循环每一排boolean flagfalse;//用于判断是否数组值为一即满足第一条件for (int j 0; j col; j) {//循环每列默认初始每块小岛周长为4int bolder4;if (grid[i][j]1) {//满足第一条件,执行第二语句flagtrue;}if (flag) {//分两种情况讨论周围两排是否有小岛和周围两列是否有小岛if (row1) {//当处于中间排而不是两边排时判断两边是否有小岛有则该小岛的周长减一if (i0irow-1) {if (grid[i-1][j]1) {bolder--;}if (grid[i1][j]1) {bolder--;} //当处于两边排时判断另边是否有小岛有则该小岛的周长减一}else if (i0) {if (grid[i1][j]1) {bolder--;}} else {if (grid[i-1][j]1) {bolder--;}} }//周围两列与周围两排原理相同if (col1) {if (j0jcol-1) {if (grid[i][j-1]1) {bolder--;}if (grid[i][j1]1) {bolder--;}}else if (j0) {if (grid[i][j1]1) {bolder--;}} else {if (grid[i][j-1]1) {bolder--;}}}}//总周长加上该小岛周长并把循环默认改为falseif (flag) {countbolder;flagfalse;}}}return count;
}
}