题解 | #被围绕的区域#

被围绕的区域

http://www.nowcoder.com/practice/3946670643fe4ec2aedcc2be45aed1a9

由于不想用dfs写,就想了个别的。

这里使用类似于并查集的思想,首先将原本O的位置置位X,并且对于所有O的位置进行记录。记录完毕后对board周围的元素先进行复原,然后从先从左上角开始根据O的记录表参考逐一复原O,然后在从右下角开始往左上角开始逐一复原(矩形对称性)。

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param board char字符型vector<vector<>> 
     * @return char字符型vector<vector<>>
     */
    
        vector<vector<char> > surroundedArea(vector<vector<char> >& board) {
        // write code here
        int n = board[0].size();
        vector<int> bc(board.size()*board[0].size(),-1);
        for(int i = 0; i<board.size(); ++i){
            for(int j =0; j<board[0].size();++j){
                if(board[i][j] == 'O'){
                    board[i][j] = 'X';
                    bc[i*n+j] = 1;
                }
            }
        }
        
        for(int i = 0; i<n;++i){
            if(bc[i] != -1)
                board[0][i] = 'O';
            if(bc[i*n] != -1)
                board[i][0] = 'O';
            if(bc[(n-1)*n+i] != -1)
                 board[n-1][i] = 'O';
            if(bc[n*i+n-1] != -1)
                 board[i][n-1] = 'O';
        }
       for(int i = 0; i<board.size(); ++i){
            for(int j = 0; j<board[0].size();++j){
                    if(i>0 && board[i-1][j]=='O' && bc[i*n+j]!=-1)
                        board[i][j] = 'O';
                    if(j>0 && board[i][j-1]=='O' && bc[i*n+j]!=-1)
                        board[i][j] = 'O';
                }
            }
        for(int i = n-1; i>=0; --i){
            for(int j = n-1; j>=0;--j){
                    if(i<n-1 && board[i+1][j]=='O' && bc[i*n+j]!=-1)
                        board[i][j] = 'O';
                    if(j<n-1 && board[i][j+1]=='O' && bc[i*n+j]!=-1)
                        board[i][j] = 'O';
                }
            }
        return board;
    }
};
全部评论

相关推荐

今天投了小鹏,收到了AI面,大概会问哪些啊?
期末一定及格:总共4个部分,心理测评、行测、然后就是问岗位、对岗位的理解、过往遇到了哪些难点怎么解决,很简单,没有什么特别专业的问题,都是一些综合素质相关的
小鹏汽车AI面6人在聊
点赞 评论 收藏
分享
qq乃乃好喝到咩噗茶:院校后面加上211标签,放大加粗,招呼语也写上211
点赞 评论 收藏
分享
06-11 13:34
门头沟学院 C++
offe从四面八方来:我真的没时间陪你闹了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务