zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    FFOM_秒交易行
    FFOM_脚本源代码
    农药_挂周金币
    保存数据,父页面列表数据更新
    点击按钮不弹出新窗口
    GridView1_RowDeleting 弹出确认对话框
    判断复选框
    获取Guid
    2019 gplt团体程序设计天梯赛总结
    Codeforces Round #550 (Div. 3)E. Median String
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/11548811.html
Copyright © 2011-2022 走看看