LeetCode 200 BFS 超时

来源:8-7 floodfill算法,一类经典问题 Number of Islands-

慕运维9331189

2020-08-11

class Solution {
public:
    vector<vector<int>> visited;
    vector<vector<int>> d{ {-1, 0}, {0, 1}, {1, 0}, {0, -1} };
    int m;   // 行数
    int n;   // 列数

    int numIslands(vector<vector<char>>& grid) {
        int result = 0;
        if (grid.size() == 0) {
            return result;
        }

        m = grid.size();
        n = grid[0].size();

        visited = vector<vector<int>>(grid.size(), vector<int>(grid[0].size(), 0));

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (grid[i][j] == '1' && visited[i][j] == 0) {
                    backtrack(grid, i, j);
                    result += 1;
                }
            }
        }

        return result;
    }

    void backtrack(vector<vector<char>> grid, int row, int column) {
        for (int i = 0; i < 4; i++) {
            int new_row = row + d[i][0];
            int new_column = column + d[i][1];

            if (new_row >= 0 && new_row < m && new_column >= 0 && new_column < n && 
                grid[new_row][new_column] == '1' && visited[new_row][new_column] == 0) {
                visited[new_row][new_column] = 1;
                backtrack(grid, new_row, new_column);
            }
        }

        return;
    }
};

老师,这个题我提交之后最后一个测试用例显示是超时,我改了几次还是不行。老师帮看一下问题到底出在哪了。。。。我实在看不出问题
多谢bobo老师了

写回答

1回答

liuyubobobo

2020-08-12

grid 需要引用传值,不然每次调用 backtrack,grid 都要被复制一次:

void backtrack(vector<vector<char>>& grid, int row, int column)


继续加油!:)

0
1
慕运维9331189
原来是这样啊……我说怎么这么慢,谢谢老师:)
2020-08-12
共1条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7441 学习 · 1159 问题

查看课程