Surrounded Regions——LeetCode进阶路

原题链接https://leetcode.com/problems/surrounded-regions/

题目描述

Given a 2D board containing ‘X’ and ‘O’ (the letter O), capture all regions surrounded by ‘X’.

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

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

Explanation:

Surrounded regions shouldn’t be on the border, which means that any ‘O’ on the border of the board are not flipped to ‘X’. Any ‘O’ that is not on the border and it is not connected to an ‘O’ on the border will be flipped to ‘X’. Two cells are connected if they are adjacent cells connected horizontally or vertically.

思路分析

把二维矩阵里的中间的O变成X,四周的X保留。
把四周的O标记,暂时记为T,然后把O变成X,T变回O,bingo

源码附录

class Solution {        
    public void solve(char[][] board) {
        if(board == null || board.length == 0 || board[0].length == 0)
        {
            return;
        }
        
        int col = board[0].length;
        int row = board.length;
        
        for(int i=0;i<col;i++)
        {
            if(board[0][i] == 'O'){
                  dfs(board,0,i);
            }
            if(board[row-1][i] == 'O')
            {
                dfs(board,row-1,i);
            }            
        }
         for(int i=0;i<row;i++)
        {
            if(board[i][0] == 'O')
            {
                 dfs(board,i,0);
            }
            if(board[i][col-1] == 'O')
            {
                dfs(board,i,col-1);
            }            
        }
        
        for(int i=0;i<row;i++)
        {
            for(int j=0;j<col;j++)
            {     
                if(board[i][j] == 'T')
                {
                    board[i][j] = 'O';
                }          
                else if(board[i][j] == 'O')
                {
                    board[i][j] = 'X';
                }
                
            }
        }
    }
    
    public void dfs(char[][] board,int m,int n)
    {
        if(n < 0 || n >= board[0].length || m < 0 || m >= board.length || board[m][n] != 'O')
        {
            return;
        }
        
        board[m][n] = 'T';
        dfs(board,m -1,n);
        dfs(board,m + 1,n);
        dfs(board,m,n-1);
        dfs(board,m,n+1);
    }
}


猜你喜欢

转载自blog.csdn.net/Moliay/article/details/88584035
今日推荐