岛屿的个数
来源:互联网 发布:缺月梧桐 知乎 编辑:程序博客网 时间:2024/04/30 07:59
给一个01矩阵,求不同的岛屿的个数。0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
样例
在矩阵:
[ [1, 1, 0, 0, 0], [0, 1, 0, 0, 1], [0, 0, 0, 1, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 1]]
中有 3
个岛.【借鉴网上代码整理得】
/**
* @param grid a boolean 2D matrix
* @return an integer
*/
public int numIslands(boolean[][] grid) {
// Write your code here
//不要忘记判断数组是否为空
int row = grid.length;
//因为直接给数组赋值{},并不是null所以不能用grid==null来判断是否为空
if (row == 0 ){
return 0;
}
//当为空数组时 col赋值会报错 数组越界
int col = grid[0].length;
int count = 0;
/*或者设置一个数组 标记该位置是否判断过 节省时间
boolean[][] visited = new boolean[row][col];
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
visited[i][j] = false;
}
}*/
//采用递归 深度搜索 搜索之后的位置重置为0
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
if (grid[i][j]){
count += 1;
dfs(grid, i, j);
}
}
}
return count;
}
public void dfs(boolean[][] grid, int x, int y){
if (x < 0 || y < 0 || x >= grid.length || y >= grid[0].length || !grid[x][y]){
return ;
}
// if (visited[x][y]){
// return ;
// }
grid[x][y] = false;//访问过得位置置为0 节省时间
dfs(grid, x - 1, y);
dfs(grid, x + 1, y);
dfs(grid, x, y - 1);
dfs(grid, x, y + 1);
}
}
0 0
- 题目:岛屿的个数
- LintCode 岛屿的个数
- LinkCode-岛屿的个数
- 岛屿的个数
- 岛屿的个数
- 岛屿的个数-lintcode
- 岛屿的个数
- 岛屿的个数
- LintCode:岛屿的个数
- 433-岛屿的个数
- 岛屿的个数
- 岛屿的个数-LintCode
- 岛屿的个数(LintCode)
- LintCode 433. 岛屿的个数
- Java实现-岛屿的个数
- 岛屿个数
- Lintcode解题笔记 - 岛屿的个数
- LintCode——岛屿的个数
- token是为了防止表单重复提交
- 图的最小生成树之Prim算法
- 第10周 C语言程序设计(新2版) 3.5例题 函数atoi(s),将字符串转换为对应数值
- 【简介】利用Arduino和Coolpy设计网关 —— HTTP协议
- String 转换成JSONObject
- 岛屿的个数
- mysql连接问题
- 练习2.4 2.5
- 图片上传处理 图片压缩 图片处理
- 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
- 【简介】利用Arduino和Coolpy设计网关 —— 开源项目Coolpy
- Python之numpy教程(五):筛选、排序、集合函数、读取存入数据
- 第四条 私有构造强化不可实例化
- Google Android开发者文档系列-与其他应用程序交互之允许其他应用启动你的Activity