130. 被围绕的区域

package leetcode;

public class demo_130 {
    public void solve(char[][] board) {
        int m=board.length;
        int n=board[0].length;
        //如果只有一行一列或者二维数组为空,则跳过
        if(m<=1||n<=1) {return;}
        //设计一个辅助数组,记录需要变换的位置
        int[][] flag=new int[m][n];
        //不会被变换只会发生在与边'O'相邻的位置
        for(int i=0;i<m;i++) {
            if(board[i][0]=='O') {
                flag[i][0]=1;
                oneflag(board, flag, i, 0, m, n);
            }
            if(board[i][n-1]=='O') {
                flag[i][n-1]=1;
                oneflag(board, flag, i, n-1, m, n);
            }
        }
        for(int j=0;j<n;j++) {
            if(board[0][j]=='O') {
                flag[0][j]=1;
                oneflag(board, flag, 0, j, m, n);
            }
            if(board[m-1][j]=='O') {
                flag[m-1][j]=1;
                oneflag(board, flag, m-1, j, m, n);
            }
        }
        for(int i=0;i<m;i++) {
            for(int j=0;j<n;j++) {
                if(board[i][j]=='O'&&flag[i][j]==0) {
                    board[i][j]='X';
                }
                System.out.print(board[i][j]);
            }
            System.out.println();
        }
    }
    public void oneflag(char[][] board,int[][] flag,int i,int j,int m,int n) {
        //递归想上找
        if(i-1>-1) {
            if(board[i-1][j]=='O'&&flag[i-1][j]==0) {
                flag[i-1][j]=1;
                oneflag(board, flag, i-1,j,m,n);
            }
        }
        //递归向下找
        if(i+1<m) {
            if(board[i+1][j]=='O'&&flag[i+1][j]==0) {
                flag[i+1][j]=1;
                oneflag(board, flag, i+1,j,m,n);
            }
        }
        //递归向左找
        if(j-1>-1) {
            if(board[i][j-1]=='O'&&flag[i][j-1]==0) {
                flag[i][j-1]=1;
                oneflag(board, flag, i, j-1,m,n);
            }
        }
        //递归向右找
        if(j+1<n) {
            if(board[i][j+1]=='O'&&flag[i][j+1]==0) {
                flag[i][j+1]=1;
                oneflag(board, flag, i, j+1,m,n);
            }
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        demo_130 d130 =new demo_130();
        char[][] board= {{'X','X','X','X'},{'X','O','O','X'},{'X','X','O','X'},{'X','O','X','X'}};
        d130.solve(board);
    }

}

 

posted on 2021-07-11 11:00  一仟零一夜丶  阅读(37)  评论(0)    收藏  举报