力扣真题:200. 岛屿数量(两种实现方法)

这篇具有很好参考价值的文章主要介绍了力扣真题:200. 岛屿数量(两种实现方法)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

力扣真题:200. 岛屿数量(两种实现方法),leetcode,算法,职场和发展

 java代码实现:

第一种:

用了类似感染的方法,就是一个节点出发,如果此时这个节点没被感染,且是陆地,就可以进入遍历,将其邻接的陆地全部遍历一遍,标志数组sign相应位置至为1.然后一次遍历一块陆地,能遍历几次就代表有几块陆地。

class Solution {
 
    public int numIslands(char[][] grid) {
        int [][] sign = new int [grid.length][grid[0].length];
        int sum = 0;
        for(int i = 0; i< grid.length;i++){
            for(int j = 0; j<grid[i].length;j++){
                if(!(grid[i][j] == '0'||sign[i][j] == 1)){
                    sum += change(grid,sign,i,j);
                }
            }
        }
        return sum;
    }
    public int change(char[][]grid,int[][]sign,int i, int j){
        if(grid[i][j] == '0'||sign[i][j] == 1){
            sign[i][j] = 1;
            return 0;
        }else{
            sign[i][j] = 1;
            if(j+1<grid[i].length){
                change(grid,sign,i,j+1);
            }
            if(i+1<grid.length){
                change(grid,sign,i+1,j);
            }
            if(j-1>=0){
                change(grid,sign,i,j-1);
            }if(i-1>=0){
                change(grid,sign,i-1,j);
            }
            return 1;
        }
    }
}

第二种:

这种方法相较于第一种有了不错的优化,没有建立新的数组,而是再原来的数组的基础上进行改动。和上面那个思路差不多,没一次遍历会将一块陆地变为海洋将其置为’0‘,当没有陆地的就遍历完成。文章来源地址https://www.toymoban.com/news/detail-628524.html

class Solution {
 
     public static int numIslands(char[][] grid) {
        int sum = 0;
        for(int i = 0; i< grid.length;i++){
            for(int j = 0; j<grid[i].length;j++){
                if(!(grid[i][j] == '0')){
                     change(grid,i,j);
                    sum ++;
                }
            }
        }
        return sum;
    }
    public static void change(char[][] grid, int i, int j){
        if(grid[i][j] == '0'){
            return ;
        }else{
            grid[i][j] = '0';
            if(j+1<grid[i].length){
                change(grid,i,j+1);
            }
            if(i+1<grid.length){
                change(grid,i+1,j);
            }
            if(j-1>=0){
                change(grid,i,j-1);
            }if(i-1>=0){
                change(grid,i-1,j);
            }
            return ;
        }
    }
}

 

到了这里,关于力扣真题:200. 岛屿数量(两种实现方法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 代码随想录图论 第一天 | 797.所有可能的路径 200. 岛屿数量

    代码随想录图论 第一天 | 797.所有可能的路径 200. 岛屿数量 一、797.所有可能的路径 题目链接:https://leetcode.cn/problems/all-paths-from-source-to-target/ 思路:求从0到n-1的所有路径,终止条件是当前节点为n-1。本题图的结构是group[][],group[x]表示x节点所能到达的所有节点的集合,深度

    2024年02月08日
    浏览(55)
  • leetcode—图 岛屿数量

    给你一个由  \\\'1\\\' (陆地)和  \\\'0\\\' (水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。 深度优先遍历 网格问题的基本概念 避免重复

    2024年01月25日
    浏览(44)
  • 关于岛屿的三道leetcode原题:岛屿周长、岛屿数量、统计子岛屿

    题1: 岛屿周长 给定一个 row x col 的二维网格地图 grid ,其中:gridi = 1 表示陆地, gridi = 0 表示水域。 网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。 岛屿

    2024年02月10日
    浏览(52)
  • 图论算法|深度优先搜索理论基础|797.所有可能的路径|广度优先搜索BFS理论基础|200. 岛屿数量

    dfs是可一个方向去搜,不到黄河不回头,直到遇到绝境了,搜不下去了,在换方向(换方向的过程就涉及到了回溯)。 递归和回溯是相辅相成的 https://leetcode.cn/problems/all-paths-from-source-to-target/ 有向无环图(DAG): 有环无向图是指在图中存在至少一个环(Cycle)的无向图。环是

    2024年02月15日
    浏览(60)
  • 算法学习——LeetCode力扣图论篇3(127. 单词接龙、463. 岛屿的周长、684. 冗余连接、685. 冗余连接 II)

    127. 单词接龙 - 力扣(LeetCode) 描述 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord - s1 - s2 - … - sk: 每一对相邻的单词只差一个字母。 对于 1 = i = k 时,每个 si 都在 wordList 中。注意, beginWord 不需要在 wordList 中。 sk == endWord 给你两

    2024年04月09日
    浏览(77)
  • 图论第二天|岛屿数量.深搜版、岛屿数量.广搜版、岛屿的最大面积、1020.飞地的数量

    文档讲解 :代码随想录 - 岛屿数量.深搜版 状态:开始学习。 本题是dfs模板题 本题代码: 文档讲解 :代码随想录 - 岛屿数量.广搜版 状态:开始学习。 思路:bfs模板题 本题代码: 文档讲解 :代码随想录 - 岛屿的最大面积 状态:开始学习。 思路: 这道题目也是 dfs bfs 基础

    2024年02月08日
    浏览(41)
  • 16.3:岛屿数量问题2

    https://leetcode.cn/problems/number-of-islands-ii/ 给你一个大小为 m x n 的二进制网格 grid 。网格表示一个地图,其中, 0 表示水, 1 表示陆地。最初, grid 中的所有单元格都是水单元格(即,所有单元格都是 0 )。 可以通过执行 addLand 操作,将某个位置的水转换成陆地。给你一个数组

    2024年02月07日
    浏览(38)
  • 岛屿数量 -- 二维矩阵的dfs算法

    岛屿数量 又被称为 FloodFill 算法

    2024年02月09日
    浏览(42)
  • C++面试宝典第20题:计算岛屿数量

    题目         在二维网格地图上,\\\'1\\\' 表示陆地,\\\'0\\\' 表示水域。如果相邻的陆地可以水平或垂直连接,则它们属于同一块岛屿。请进行编码,统计地图上的岛屿数量。比如:下面的二维网格地图,其岛屿数量为3。 解析         这道题主要考察应聘者对深度优先搜索、

    2024年01月18日
    浏览(37)
  • 代码随想录图论 第二天 | 695. 岛屿的最大面积 1020. 飞地的数量

    代码随想录图论 第二天 | 695. 岛屿的最大面积 1020. 飞地的数量 一、695. 岛屿的最大面积 题目链接:https://leetcode.cn/problems/max-area-of-island/ 思路:典型的遍历模板题,我采用深度优先,每块岛屿递归遍历的时候计数,递归完比较大小记录最大值。 二、1020. 飞地的数量 题目链接

    2024年02月07日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包