Middle-题目80:200. Number of Islands

原创 2016年05月31日 17:00:18

题目原文:
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代表海水,求出有几个岛。
题目分析:
本题是一个标准的不能再标准的dfs问题,从一个未访问的“岛”点开始从四个方向搜索,遇到“海水”或者矩阵边界就退出。
源码:(language:java)

public class Solution {
    public int numIslands(char[][] grid) {
        if (grid.length==0 || grid[0].length==0) 
            return 0;
        int count = 0;
        boolean[][] visited = new boolean[grid.length][grid[0].length];
        for (int i=0; i<grid.length; i++) {
            for (int j=0; j<grid[0].length; j++) {
                if (grid[i][j]=='1' && !visited[i][j]) { 
                    count++;
                    dfs(grid, visited, i, j);
                }
            }
        }
        return count;
    }

    private void dfs(char[][] grid, boolean[][] visited, int row, int col) {
        if (row<0 || row>=grid.length || col<0 || col>=grid[0].length || visited[row][col] || grid[row][col]=='0') // grid[i][j] is out of range
            return; 
        visited[row][col] = true;
        dfs(grid, visited, row-1, col);
        dfs(grid, visited, row+1, col);
        dfs(grid, visited, row, col-1);
        dfs(grid, visited, row, col+1);
    }
}

成绩:
5ms,beats 25.10%,众数3ms,40.17%
Cmershen的碎碎念:
其实本题的算法也适用于计算机图形学中的“颜色填充算法”,其原理一模一样。

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

leetcode 200 : Number of Islands

leetcode 200 : Number of Islands java c++ python
  • xudli
  • xudli
  • 2015年05月22日 07:40
  • 7363

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 sur...
  • u012614906
  • u012614906
  • 2017年03月15日 20:47
  • 1210

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 surr...
  • gao1440156051
  • gao1440156051
  • 2016年08月11日 23:22
  • 404

200. Number of Islands Leetcode Python

Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is sur...
  • hyperbolechi
  • hyperbolechi
  • 2015年04月15日 19:14
  • 1635

第三周:( LeetCode200 ) Number of Islands(c++)

原题:本题是经典的简单图论问题,求岛的个数也即求图上的连通区间的个数。可采用深搜或者广搜。假设共有n个点,时间复杂度为o(n)。本题笔者采用深搜的递归和非递归两种解法。将遍历过的“1”被改为“0”,其...
  • marlonlyh
  • marlonlyh
  • 2017年03月09日 19:25
  • 193

Number of Islands C++

Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surr...
  • u014056175
  • u014056175
  • 2015年09月11日 10:09
  • 498

[leetcode-200]Number of Islands(java)

问题描述: Given a 2d grid map of ‘1’s (land) and ‘0’s (water), count the number of islands. An island i...
  • zdavb
  • zdavb
  • 2015年08月27日 21:12
  • 295

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 sur...
  • fly_yr
  • fly_yr
  • 2015年11月20日 13:21
  • 723

leetcode 200. Number of Islands-岛屿数量|并查集算法

原题链接:200. Number of Islands 【思路】 本题考查dfs和bfs的结合。由于题目没有限制不可改变原数组的结构,所以一旦遇到1,就将周边相邻的几个1置为2。遍历整个数组,遇到1的...
  • happyaaaaaaaaaaa
  • happyaaaaaaaaaaa
  • 2016年03月18日 13:02
  • 1279

[leetcode] 305. Number of Islands II 解题报告

题目链接: https://leetcode.com/problems/number-of-islands-ii/ A 2d grid map of m rows and n columns i...
  • qq508618087
  • qq508618087
  • 2016年03月26日 06:50
  • 1964
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Middle-题目80:200. Number of Islands
举报原因:
原因补充:

(最多只允许输入30个字)