leetcode ----130. Surrounded Regions

思路:

先遍历整个四个边,如果边上有‘O’,那就沿着‘O’一直遍历,把所有的‘O’都变成‘#’,遍历完成四条边后,然后遍历真个图,遇到‘O’就赋值‘X’,遇到‘#’还原成‘O’


void helper(vector<vector<char>> &board,int i,int j) //检查边界是否有‘O’,有的话置为‘#’,沿着‘O’一直检查  
    {  
        if(board[i][j]=='O')  
        {  
            board[i][j]='#';  
            if(i>1)              
                helper(board,i-1,j);//左边  
            if(j>1)  
                helper(board,i,j-1);//上边  
            if(i+1<board.size())  
                helper(board,i+1,j);//右边  
            if(j+1<board[0].size())  
                helper(board,i,j+1);//下边  
        }  
    }  
    void solve(vector<vector<char>>& board)   
    {  
        if(board.empty())  
            return ;  
        int row = board.size(),col = board[0].size();//  
        for(int i=0;i<row;i++)//  
        {  
            helper(board,i,0);//检测第一列  
            helper(board,i,col-1);//检测最后一列  
        }  
        for(int j=1;j<col-1;j++)  
        {  
            helper(board,0,j);//检测第一行  
            helper(board,row-1,j);//检测最后一行  
        }  
        for(int i=0;i<row;i++)//把里面的‘O’替换成‘X’,把‘#’还原成‘O’  
        {  
            for(int j=0;j<col;j++)  
            {  
                if(board[i][j]=='O')  
                    board[i][j]='X';  
                else if(board[i][j]=='#')  
                    board[i][j]='O';  
            }  
        }  
          
    }


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值