博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode刷题:200. Number of Islands
阅读量:4041 次
发布时间:2019-05-24

本文共 2323 字,大约阅读时间需要 7 分钟。

LeetCode刷题:200. Number of Islands

原题链接:

Given a 2d grid map of ‘1’s (land) and ‘0’s (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.

Example 1:

11110

11010
11000
00000
Answer: 1

Example 2:

11000

11000
00100
00011
Answer: 3

这个题目的大概意思是给定了一个二维数组表示的地图,其中 1 代表岛,而 0 代表水,要求计算地图中岛的数量。

判断岛的规则是:岛是被水包围着,由水平或垂直相连的相邻陆地形成。
你可以假设网格的所有四个边都被水包围着。

问题分析

岛的数量问题

根据题目的描述,如图所示,岛由水包围着,由水平或垂直相连的相邻陆地形成。则图中,岛的数量为3个。

这个有很多种求解方法,其中可以使用DFS算法求解。

算法设计

package com.bean.algorithmbasic;public class NumberOfIslands2 {
int y; // 行 int x; // 列 char[][] g; // 目标数组 /** * 求岛的数量 */ public int numIslands(char[][] grid) { // Store the given grid // This prevents having to make copies during recursion g = grid; // 存储计算结果 int ANSWER = 0; // 计算二维数组的行数 y = g.length; //如果行数为0,则返回 if (y == 0) return 0; //计算二维数组的列数 x = g[0].length; // 对给定的二维数组单元格进行遍历访问 for (int i = 0; i < y; i++) { for (int j = 0; j < x; j++) { //当某一个单元格数值为1时,调用dfs算法进行搜索 if (g[i][j] == '1') { //调用DFS搜索算法 dfs(i, j); //更新ANSWER ANSWER++; } } } return ANSWER; } /** * DFS搜索算法 * 参数代表需要访问检查的坐标位置。 * 将遍历访问过的单元格标记为0 */ private void dfs(int i, int j) { // 设置边界条件:如果行数<0 或者达到边界;如果列数<0 或者达到边界;或者单元格的值不是1,则返回。 if (i < 0 || i >= y || j < 0 || j >= x || g[i][j] != '1') return; // 将遍历访问过的单元格标记为0 g[i][j] = '0'; // 检查所有相邻的位置,由上、下、左、右四个方向 dfs(i + 1, j); dfs(i - 1, j); dfs(i, j + 1); dfs(i, j - 1); } public static void main(String[] args) { // TODO Auto-generated method stub char[][] array= { {
'1','1','0','0','0'}, {
'1','1','0','0','0'}, {
'0','0','1','0','0'}, {
'0','0','0','1','1'} }; NumberOfIslands2 noi=new NumberOfIslands2(); int result=noi.numIslands(array); System.out.println("RESULT IS: "+result); }}

(完)

你可能感兴趣的文章
uboot内存布局
查看>>
uboot移植-内存分布
查看>>
ubuntu下如何把用户的语言环境变量改为中文
查看>>
Ubuntu Server 16.04修改IP、DNS、hosts
查看>>
几个可以替代百度的搜索引擎
查看>>
BT.656标准简介
查看>>
BT.601与BT.656
查看>>
标准BT.656并行数据结构
查看>>
A Brief Introduction to Digital Video
查看>>
数字视频接口
查看>>
my.cnf 自动生成脚本
查看>>
如何通过instant client 来连接数据库以及使用exp/imp?
查看>>
flask +python+vue 监控软件(一)
查看>>
flask +python+vue 监控软件(二)
查看>>
go AES加密解密
查看>>
python AES加密解密,key的长度不受限制
查看>>
oracle 查询sequnce# 在哪个归档备份集下面
查看>>
使用kettle 增量同步mysql到oracle以及oracle到mysql的测试
查看>>
MySQL8.0与MySQL5.7 OLTP 性能测试对比
查看>>
mongodb 分片集群安装搭建测试
查看>>