200 Number of Islands

来源:互联网 发布:lol数据库魔切 编辑:程序博客网 时间:2024/05/22 00:18

也是一道经典的 dfs的题目,我一眼都不看代码,试图自己从零开始写,看能不能一遍过。。。

代码如下,捂住眼不看,哈哈

public class Solution {    public int numIslands(char[][] grid) {        int count=0;        for(int i=0; i<grid.length; i++){            for(int j=0; j<grid[0].length; j++){                if(grid[i][j]=='1'){                    count++;                    dfs(grid, i, j);                }            }        }        return count;    }        private void dfs(char[][] grid, int x, int y){        if(x<0 || y<0 || x>=grid.length || y>=grid[0].length || grid[x][y]=='0') return;        grid[x][y]='0';        dfs(grid, x-1, y);        dfs(grid, x+1, y);        dfs(grid, x, y-1);        dfs(grid, x, y+1);    }}

今天的代码如下,说老实话,写到dfs,我还是缺乏一个明确的设计思路,所以还是看了一眼代码,现在记住了,dfs在这道题中的作用就是set to 0,就是毁灭island,遇到一个island就把这个island全部设为0。。。然而如何遍历这些island,那就是从主函数里去做两个loop了,找到了1的点,那就调用毁灭函数dfs,同时记得计数哦。。。

public class Solution {    public int numIslands(char[][] grid) {        if(grid.length==0 || grid[0].length==0) return 0;        int m= grid.length;        int n= grid[0].length;        int result=0;        for(int i=0; i<m; i++){            for(int j=0; j<n; j++){                if(grid[i][j]=='1'){                    result++;                    dfs(grid, i, j);                }            }        }        return result;    }        private void dfs(char[][] grid, int x, int y){        if(x<0 || y<0 || x>=grid.length || y>=grid[0].length || grid[x][y]=='0') return;        grid[x][y]='0';        dfs(grid, x-1, y);        dfs(grid, x+1, y);        dfs(grid, x, y-1);        dfs(grid, x, y+1);    }}






0 0
原创粉丝点击