• 130. Surrounded Regions


    该题是要将被X包围的O区域用X覆盖,处于边界的O区域不算是被X包围。

    主要解决思路是遍历边框的的元素,如果是O,那么从该区域开始,进行深度遍历,将是O的区域改成Y,表示这个区域是没有被包围的。完成边框遍历后,剩下的O区域都是被X包围的了。对所有元素进行遍历,将O改成X, 将Y改回O即可。

    代码如下:

     1 class Solution {
     2     public void solve(char[][] board) {
     3         if( board.length == 0 || board == null ){
     4             return;
     5         }
     6         
     7         int m = board.length, n = board[0].length;
     8         
     9         for(int i = 0, j = 0 ; i < m; i++){
    10             if(board[i][j] == 'O'){
    11                 occupy(board, i, j);
    12             }
    13         }
    14         
    15         for(int i = 0, j = n - 1 ; i < m; i++){
    16             if(board[i][j] == 'O'){
    17                 occupy(board, i, j);
    18             }           
    19         }
    20         
    21         for(int i = 0, j = 0; j < n ; j++){
    22             if(board[i][j] == 'O'){
    23                 occupy(board, i, j);
    24             }            
    25         }
    26         
    27         for(int i = m - 1, j = 0 ; j < n; j++){
    28             if(board[i][j] == 'O'){
    29                 occupy(board, i, j);
    30             }            
    31         }
    32         
    33         for(int i = 0 ; i < m ; i++){
    34             for(int j = 0; j < n ; j++){
    35                 if(board[i][j] == 'O'){
    36                     board[i][j] = 'X';
    37                 }
    38                 
    39                 if(board[i][j] == 'Y'){
    40                     board[i][j] = 'O';
    41                 }
    42             }
    43         }
    44         
    45     }
    46     
    47     private void occupy(char[][] board, int i, int j){
    48         board[i][j] = 'Y';
    49         
    50         int m = board.length, n = board[0].length;
    51         if( i + 1 < m && board[i+1][j] == 'O'){
    52             occupy(board, i + 1, j);
    53         }
    54         
    55         if( i - 1 >= 0 && board[i-1][j] == 'O' ){
    56             occupy(board, i - 1, j);
    57         }
    58         
    59         if( j + 1 < n && board[i][j+1] == 'O'){
    60             occupy(board, i , j + 1);
    61         }
    62         
    63         if( j - 1 >= 0 && board[i][j-1] == 'O'){
    64             occupy(board, i, j - 1);
    65         }
    66     }
    67 }

    END

  • 相关阅读:
    angularjs学习笔记—工具方法
    js日期格式转换的相关问题探讨
    vue路由原理剖析
    如何减少UI设计师产品与前端工程师的沟通成本
    前端优化带来的思考,浅谈前端工程化
    前端入门方法
    自写juqery插件实现左右循环滚动效果图
    前端大综合
    前端收集
    如何在代码中减少if else语句的使用
  • 原文地址:https://www.cnblogs.com/sssysukww/p/9002464.html
Copyright © 2020-2023  润新知