zoukankan      html  css  js  c++  java
  • Leetcode130. 被围绕的区域(深搜)

    问题描述

    给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。
    找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。

    示例

    X X X X
    X O O X
    X X O X
    X O X X
    

    运行你的函数后,矩阵变为:

    X X X X
    X X X X
    X X X X
    X O X X
    

    解释:
    被围绕的区间不会存在于边界上,换句话说,任何边界上的 'O' 都不会被填充为 'X'。 任何不在边界上,或不与边界上的 'O' 相连的 'O' 最终都会被填充为 'X'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。

    代码

    class Solution {
        void def(int i,int j,int[][]res1,char[][]board) {
    		if(i-1>0&&board[i-1][j]=='O'&&res1[i-1][j]==0)
    				{
    				res1[i-1][j]=1;
    				def(i-1,j,res1,board);
    				}
    			if(i+1<board.length&&board[i+1][j]=='O'&&res1[i+1][j]==0)
    				{
    				res1[i+1][j]=1;
    				def(i+1,j,res1,board);
    				}
    			if(j-1>0&&board[i][j-1]=='O'&&res1[i][j-1]==0)
    				{
    				res1[i][j-1]=1;
    				def(i,j-1,res1,board);
    				}
    			if(j+1<board[0].length&&board[i][j+1]=='O'&&res1[i][j+1]==0)
    				{
    				res1[i][j+1]=1;
    				def(i,j+1,res1,board);
    				}
    	}
    	 public void solve(char[][] board) {
    		 if(board==null||board.length==0||board[0].length==0)
    			 return;
    		 	int[][] res1=new int[board.length][board[0].length];
    		 	int[][] res2=new int[board.length][board[0].length];
    		 	for(int i=0;i<board.length;i++) {
    		 		int j=0;
    		 			if(board[i][j]=='O') {
    		 				res1[i][j]=1;
    		 				def(i,j,res1,board);
    		 			}
    		 		j=board[0].length-1;
    		 			if(board[i][j]=='O') {
    		 				res1[i][j]=1;
    		 				def(i,j,res1,board);
    		 			}
    		 	}
    		 	for(int j=0;j<board[0].length;j++) {
    		 		int i=0;
    		 			if(board[i][j]=='O') {
    		 				res1[i][j]=1;
    		 				def(i,j,res1,board);
    		 			}
    		 		i=board.length-1;
    		 			if(board[i][j]=='O') {
    		 				res1[i][j]=1;
    		 				def(i,j,res1,board);
    		 			}
    		 	}
    		 	for(int i=0;i<board.length;i++) {
    		 		for(int j=0;j<board[0].length;j++) {
    		 			if(board[i][j]=='O'&&res1[i][j]==0) {
    		 				board[i][j]='X';
    		 			}
    		 		}
    		 	}
    	    }
    }
    

  • 相关阅读:
    利用杨辉三角和阶乘计算组合数
    验证字符串是否为回文数
    利用线性同余产生伪随机数+可变参数使用
    根据RandomStr.java:使用类型转换生成六位验证字符串。
    Java语言基础问题
    从命令行输入参数值,输出求和值。
    愚公移山_节选(伪代码)
    CodeForces
    CodeForces
    E
  • 原文地址:https://www.cnblogs.com/code-fun/p/14303016.html
Copyright © 2011-2022 走看看