Java解决岛屿周长问题
2023-12-13 23:49:35
Java解决岛屿周长问题
01 题目
给定一个 row x col
的二维网格地图 grid
,其中: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.length
col == grid[i].length
1 <= row, col <= 100
grid[i][j]
为0
或1
02 知识点
- 二维数组
- DFS,遍历循环求解
03 我的题解
public class shuzu06 {
public static void main(String[] args) {
//测试数据
int[][] grid=new 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 count=0;//用于记录周长
int row = grid.length;//获取排数
int col = grid[0].length;//获取列数
if (row==1&&col==1) {
count=4;//当只有一格时,返回周长4
return count;
}
for (int i = 0; i < row; i++) {
//循环每一排
boolean flag=false;//用于判断是否数组值为一,即满足第一条件
for (int j = 0; j < col; j++) {
//循环每列,默认初始每块小岛周长为4
int bolder=4;
if (grid[i][j]==1) {
//满足第一条件,执行第二语句
flag=true;
}
if (flag) {
//分两种情况讨论,周围两排是否有小岛和周围两列是否有小岛
if (row>1) {
//当处于中间排而不是两边排时,判断两边是否有小岛,有则该小岛的周长减一
if (i>0&&i<row-1) {
if (grid[i-1][j]==1) {
bolder--;
}
if (grid[i+1][j]==1) {
bolder--;
} //当处于两边排时,判断另边是否有小岛,有则该小岛的周长减一
}else if (i==0) {
if (grid[i+1][j]==1) {
bolder--;
}
} else {
if (grid[i-1][j]==1) {
bolder--;
}
}
}
//周围两列与周围两排原理相同
if (col>1) {
if (j>0&&j<col-1) {
if (grid[i][j-1]==1) {
bolder--;
}
if (grid[i][j+1]==1) {
bolder--;
}
}else if (j==0) {
if (grid[i][j+1]==1) {
bolder--;
}
} else {
if (grid[i][j-1]==1) {
bolder--;
}
}
}
}
//总周长加上该小岛周长,并把循环默认改为false
if (flag) {
count+=bolder;
flag=false;
}
}
}
return count;
}
}
?
?
文章来源:https://blog.csdn.net/2302_77182979/article/details/134915998
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!