[Leetcode 130, medium] Surrounded regions

Problem:

Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'.

A region is captured by flipping all 'O's into 'X's in that surrounded region.

For example,

X X X X
X O O X
X X O X
X O X X

After running your function, the board should be:

X X X X
X X X X
X X X X
X O X X

Analysis:


Solutions:

C++:

    void SearchReplace(vector<vector<char> > &board, int row, int col, char replace)
    {
        board[row][col] = replace;
        queue<pair<int, int> > visited;
        visited.push(make_pair(row, col));
        while(!visited.empty()) {
            pair<int, int> curr_pt(visited.front());
            visited.pop();
            for(int i = -1; i <= 1; ++i) {
                if(i == 0 || curr_pt.first + i < 0 || curr_pt.first + i >= board.size()
                   || board[curr_pt.first + i][curr_pt.second] != 'O')
                    continue;
                    
                board[curr_pt.first + i][curr_pt.second] = replace;
                visited.push(make_pair(curr_pt.first + i, curr_pt.second));
            }
            for(int i = -1; i <= 1; ++i) {
                if(i == 0 || curr_pt.second + i < 0 || curr_pt.second + i >= board[0].size()
                   || board[curr_pt.first][curr_pt.second + i] != 'O')
                        continue;
                        
                board[curr_pt.first][curr_pt.second + i] = replace;
                visited.push(make_pair(curr_pt.first, curr_pt.second + i));
            }
        }
    }

    void solve(vector<vector<char> > &board) 
    {
        if(board.empty())
            return;

        for(int col = 0; col < board[0].size(); ++col) {
            if(board[0][col] == 'O')
                SearchReplace(board, 0, col, 'Y');
            if(board[board.size() - 1][col] == 'O')
                SearchReplace(board, board.size() - 1, col, 'Y');
        }

        for(int row = 0; row < board.size(); ++row) {
            if(board[row][0] == 'O')
                SearchReplace(board, row, 0, 'Y');
            if(board[row][board[0].size() - 1] == 'O')
                SearchReplace(board, row, board[0].size() - 1, 'Y');
        }

        for(int row = 0; row < board.size(); ++row) {
            for(int col = 0; col < board[0].size(); ++col) {
                if(board[row][col] == 'O')
                    board[row][col] = 'X';
                else if(board[row][col] == 'Y')
                    board[row][col] = 'O';
            }
        }
    }
Java :


Python:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值