美文网首页Leetcode
Leetcode.130.Surrounded Regions

Leetcode.130.Surrounded Regions

作者: Jimmy木 | 来源:发表于2019-11-12 19:16 被阅读0次

题目

给定一个二维数组, 数组元素包含'X'和'O'. 如果'O'被'X'围起来, 就将'O'改成'X'.

Input:   {{'X', 'X', 'X', 'X'},
          {'X', 'O', 'O', 'X'},
          {'X', 'X', 'O', 'X'},
          {'X', 'O', 'X', 'X'}}

Output:  {{'X', 'X', 'X', 'X'},
          {'X', 'X', 'X', 'X'},
          {'X', 'X', 'X', 'X'},
          {'X', 'O', 'X', 'X'}} 

思路

农村包围城市, 当最外围出现'O'时, 才能和内部连通留下'O'. 遍历最外圈的元素, 对最外围元素进行上下左右方向递归.
通过修改'O', 来标记需要修改的元素.
时间复杂度O(n²)
空间复杂度O(1)

void solveRecrution(vector<vector<char>>& board, int i, int j) {
    // 保存需要置为'O'的元素
    board[i][j] = '?';
    if (i > 0 && board[i-1][j] == 'O') {
        solveRecrution(board, i-1, j);
    }
    if (i + 1 < board.size() && board[i+1][j] == 'O') {
        solveRecrution(board, i+1, j);
    }
    if (j > 0 && board[i][j-1] == 'O') {
        solveRecrution(board, i, j-1);
    }
    if (j + 1 <board[i].size() && board[i][j+1] == 'O') {
        solveRecrution(board, i, j+1);
    }
}

// 递归
void solve(vector<vector<char>>& board) {
    if (board.size() < 2) return ;
    int row = (int)board.size();
    int col = (int)board[0].size();
    // 遍历上下边
    for (int j = 0; j < col; ++j) {
        if (board[0][j] == 'O') {
            solveRecrution(board,0,j);
        }
        if (board[row-1][j] == 'O') {
            solveRecrution(board, row-1, j);
        }
    }
    // 遍历左右边
    for (int i = 1; i < row-1; ++i) {
        if (board[i][0] == 'O') {
            solveRecrution(board,i,0);
        }
        if (board[i][col-1] == 'O') {
            solveRecrution(board,i,col-1);
        }
    }

    for (int i = 0; i < board.size(); ++i) {
        for (int j = 0; j < col; ++j) {
            if (board[i][j] == 'O') {
                board[i][j] = 'X';
            } else if (board[i][j] == 'A') {
                board[i][j] = 'O';
            }
        }
    }
}

总结

DFS, 关键是分析具体问题, 找到递归的突破点. 安装常规从左到右, 从上到下就很难分析, 容易

相关文章

网友评论

    本文标题:Leetcode.130.Surrounded Regions

    本文链接:https://www.haomeiwen.com/subject/fgyqictx.html