LeetCode/solutions/200. Number of Islands.md
2019-09-02 17:29:55 +08:00

1.2 KiB

200. Number of Islands

思路

求岛屿数量. 简单用DFS或者BFS就可以了. 下面代码用的DFS.

亲测visited数组定义成bool型要比定义成int型慢不少.

C++

class Solution {
    private:
    vector<int>dx{-1, 1, 0, 0}; // 上下左右四个方向
    vector<int>dy{0, 0, -1, 1};
    void DFS(int i, int j, const vector<vector<char>>& grid, vector< vector<int>>& visited){
        if(i < 0 || i >= grid.size() || j < 0 || j >= grid[0].size()) return;
        if(visited[i][j] || grid[i][j] == '0') return;
        
        visited[i][j] = 1;
        for(int k = 0; k < 4; k++)
            DFS(i + dx[k], j + dy[k], grid, visited);
    }
public:
    int numIslands(vector<vector<char>>& grid) {
        int m = grid.size(), res = 0;
        if(!m) return 0;
        int n = grid[0].size();
        
        vector< vector<int>>visited(m, vector<int>(n, 0)); // int比bool型数组快
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                if(visited[i][j] || grid[i][j] == '0') continue;
                DFS(i, j, grid, visited);
                res++;
            }
        }
        return res;
    }
};