zoukankan      html  css  js  c++  java
  • Surrounded Regions

    Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'.

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

    For 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


    从四个边入手,把不能换成X的O标记出来,用map存。 然后再遍历这个array, 更改可以变成X的。
     1 public class Solution {
     2     public void solve(char[][] board) {
     3         // Start typing your Java solution below
     4         // DO NOT write main() function
     5         if(board == null || board.length == 0 || board[0].length == 0) return;
     6         boolean[][] map = new boolean[board.length][board[0].length];
     7         int len = board[0].length;
     8         LinkedList<Integer> ll = new LinkedList<Integer>();
     9         for(int i = 0; i < board.length; i ++){
    10             if(board[i][0] == 'O' && !map[i][0]){
    11                 map[i][0] = true;
    12                 ll.push(i * len);
    13             } 
    14             if(board[i][len - 1] == 'O' && !map[i][len - 1]){ 
    15                 map[i][len - 1] = true;
    16                 ll.push(i * len + len - 1);
    17             }
    18         }
    19         for(int i = 0; i < len; i ++){
    20             if(board[0][i] == 'O' && !map[0][i]){
    21                 map[0][i] = true;
    22                 ll.push(i);
    23             } 
    24             if(board[board.length - 1][i] == 'O' && !map[board.length - 1][i]){ 
    25                 map[board.length - 1][i] = true;
    26                 ll.push((board.length - 1) * len + i);
    27             }
    28         }
    29         while(ll.size() != 0){
    30             int tmp = ll.poll();
    31             int i = tmp / len;
    32             int j = tmp % len;
    33             if(i > 1 && board[i - 1][j] == 'O' && !map[i - 1][j]){
    34                 map[i - 1][j] = true;
    35                 ll.push((i - 1) * len + j);
    36             }
    37             if(j > 1 && board[i][j - 1] == 'O' && !map[i][j - 1]){
    38                 map[i][j - 1] = true;
    39                 ll.push(i * len + j - 1);
    40             }
    41             if(i + 1 < board.length && board[i + 1][j] == 'O' && !map[i + 1][j]){
    42                 map[i + 1][j] = true;
    43                 ll.push((i + 1) * len + j);
    44             }
    45             if(j + 1 < len && board[i][j + 1] == 'O' && !map[i][j + 1]){
    46                 map[i][j + 1] = true;
    47                 ll.push(i * len + j + 1);
    48             }
    49         }
    50         for(int i = 0; i < board.length; i ++)
    51             for(int j = 0; j < len; j ++)
    52                 if(!map[i][j] && board[i][j] == 'O')
    53                     board[i][j] = 'X';
    54     }
    55 }
  • 相关阅读:
    倒序数组的算法
    SQL 日期操作函数
    sp_executesql 练习
    c#编译器对byte类型的一些规则
    角度在excel中如何输入并使其能计算
    5天学会fx5800计算器测量编程(二) fx5800函数学习
    5天学会fx5800计算器测量编程(二) fx5800语法学习
    如何快速的将大地坐标系导入进施工结构的cad平面图纸中
    CAD中批量导入坐标和点号的方法命令
    5天学会fx5800计算器测量编程(一)
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/3442585.html
Copyright © 2011-2022 走看看