130. Surrounded Regions

Posted skillking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了130. Surrounded Regions相关的知识,希望对你有一定的参考价值。

一、题目

  1、审题

  技术分享图片

  2、分析

    给出一个二维数组,数组中只包含字符 ‘O‘、‘X‘, 将数组中被 ‘X‘ 包围的 ‘O‘ 全部换成 ‘X‘。(其中紧邻边界不算包围)

 

二、解答

  1、思路: 

    方法一、

      ①、将紧挨着棋盘边缘的 "O‘" 或者与边缘的 "O" 连通的 “O” 全部换成 “1“;

      ②、将剩下的 O 全部换成 X,将 “1” 全部换成 “O“;

    public void solve(char[][] board) {
        int rows = board.length;
        if(rows < 3)
            return;
        int cols = board[0].length;
        if(cols < 3)
            return;
        
        for (int row = 0; row < rows; row++) {
            check(board, row, 0, rows, cols); // 第一列的每个元素
            check(board, row, cols - 1, rows, cols); // 最后一列的每个元素
        }
        
        for (int j = 1; j < cols - 1; j++) {
            check(board, 0, j, rows, cols);    // 第一行 (除了第一个、最后一个元素)
            check(board, rows - 1, j, rows, cols);  // 最后一行
        }
        
        for(int i = 0; i < rows; i++) {
            for(int j = 0; j < cols; j++) {
                if(board[i][j] == ‘o‘)
                    board[i][j] = ‘x‘;
                if(board[i][j] == ‘1‘)
                    board[i][j] = ‘o‘;
                
                System.out.print(board[i][j]);
            }
            System.out.println();
        }
    }
    

    void check(char[][] board, int row, int col, int rows, int cols) {
        
        if(board[row][col] == ‘o‘) {
            board[row][col] = ‘1‘;
            if(row > 1)
                check(board, row - 1, col, rows, cols);
            if(col > 1)
                check(board, row, col - 1, rows, cols);
            if(row < rows - 1)
                check(board, row + 1, col, rows, cols);
            if(col < cols - 1)
                check(board, row, col + 1, rows, cols);
        }
    }
    

 

以上是关于130. Surrounded Regions的主要内容,如果未能解决你的问题,请参考以下文章

130. Surrounded Regions

130. Surrounded Regions

130. Surrounded Regions

130. Surrounded Regions

130. Surrounded Regions

130. Surrounded Regions