[LeetCode] 130

来源:互联网 发布:网络高清摄像头安装方法 编辑:程序博客网 时间:2024/05/16 18:44

130. Surrounded Regions

题目:给定一个包含两种元素'X', 'O'的2维数组,将其中所有被'X‘包围的'O'替换为'X'


思路:除了和边界有接触的’O'的区域,其他的‘O'的区域都会变成'X'。所以扫描一遍边界,对于在边界上的’O', 通过BFS标记与它相邻的'O'。

扫描完成后将未标记的‘O'替换为’X'


代码:

</pre><pre name="code" class="cpp">class Solution {public:    void helper(vector<vector<char>>& board, int i, int j)    {        queue<pair<int, int>> q;        pair<int, int> p;        p.first = i;        p.second = j;                board[i][j] = 'M';                q.push(p);                int dir[4][2] = {{0,1}, {0,-1}, {1,0}, {-1,0}};                while(!q.empty())        {            pair<int, int> g = q.front();            q.pop();                        for(int i = 0; i < 4; i++)            {                int tmpX = dir[i][0] + g.first;                int tmpY = dir[i][1] + g.second;                if(tmpX < 0 || tmpY < 0 || tmpX >= board.size() || tmpY >= board[0].size()) continue;                                if(board[tmpX][tmpY] == 'O')                {                    q.push(pair<int,int>(tmpX, tmpY));                    board[tmpX][tmpY] = 'M';                }            }        }    }    void solve(vector<vector<char>>& board) {        int m = board.size();        if(m == 0) return;        int n = board[0].size();                for(int i = 0; i < m; i++)        {            if(board[i][0] == 'O')            {                helper(board, i, 0);            }            if(board[i][n-1] == 'O')            {                helper(board, i, n-1);            }        }        for(int j = 0; j < n; j++)        {            if(board[0][j] == 'O')            {                helper(board, 0, j);            }            if(board[m-1][j] == 'O')            {                helper(board, m-1, j);            }        }                for(int i = 0; i < m; i++)        {            for(int j = 0; j < n; j++)            {                if(board[i][j] == 'M')                {                    board[i][j] = 'O';                }                else if(board[i][j] == 'O')                {                    board[i][j] = 'X';                }                            }        }            }};


0 0