• 130. 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.

    class Solution {
        public void solve(char[][] board) {
            if (board.length == 0 || board[0].length == 0) return;
            if (board.length < 3 || board[0].length < 3) return;
            int m = board.length;
            int n = board[0].length;
            for (int i = 0; i < m; i++) {
                if (board[i][0] == 'O') helper(board, i, 0);
                if (board[i][n - 1] == 'O') helper(board, i, n - 1);
            }
            for (int j = 1; j < n - 1; j++) {
                if (board[0][j] == 'O') helper(board, 0, j);
                if (board[m - 1][j] == 'O') helper(board, m - 1, j);
            }
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    if (board[i][j] == 'O') board[i][j] = 'X';
                    if (board[i][j] == '*') board[i][j] = 'O';
                }
            }
        }
        
        private void helper(char[][] board, int r, int c) {
            if (r < 0 || c < 0 || r > board.length - 1 || c > board[0].length - 1 || board[r][c] != 'O') return;
            board[r][c] = '*';
            helper(board, r + 1, c);
            helper(board, r - 1, c);
            helper(board, r, c + 1);
            helper(board, r, c - 1);
        }
    }

    先把周围的o找到替换成*,然后把跟边界o相连的o也替换成*,然后把仍存在的O换成X,再把*换回O

  • 相关阅读:
    day06.2-软链接与硬链接
    day06.1-磁盘管理
    day05.3-Linux进程管理
    day05.2-Vim编辑器
    day05.1-文件归档与压缩
    day04-Linux系统中用户控制及文件权限管理方法
    day03-Linux操作系统目录结构
    day02.2-常用Linux命令整理
    BST_traverse(中序遍历,前序遍历,后序遍历)
    JS_DOM_practice with Pokemon
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/11548811.html
Copyright © 2020-2023  润新知