题解 | #被围绕的区域#

被围绕的区域

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;
    }
};
全部评论

相关推荐

07-17 11:27
门头沟学院 Java
点赞 评论 收藏
分享
05-27 14:57
西北大学 golang
强大的社畜在走神:27届真不用急,可以搞点项目、竞赛再沉淀沉淀,我大二的时候还在天天打游戏呢
投递华为等公司10个岗位
点赞 评论 收藏
分享
07-02 10:39
门头沟学院 Java
Steven267:说点真实的,都要秋招了,还没有实习,早干嘛去了,本来学历就差,现在知道急了,而且你这个简历完全可以写成一页,劣势太大了,建议转测试
点赞 评论 收藏
分享
昨天 14:55
门头沟学院 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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