(DFS思路对,写复杂了)

给定一个二维的矩阵,包含 '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'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。

关键:识别是深度遍历DFS的题,我写的DFS比下面的太复杂了,

链接:https://www.nowcoder.com/questionTerminal/c159db5028034aa595043a1a220a62dd
来源:牛客网

/*
 * 所有与四条边相连的O都保留,其他O都变为X
 * 遍历四条边上的O,并深度遍历与其相连的O,将这些O都转为*
 * 将剩余的O变为X
 * 将剩余的*变为O
 */
public int rowNum = 0;
public int colNum = 0;
public void solve(char[][] board) {
    if(board == null || board.length <= 0|| board[0].length <= 0){
        return;
    }
    rowNum = board.length;
    colNum = board[0].length;
    for(int i = 0; i < colNum; i++){
        dfs(board, 0, i);
        dfs(board, rowNum-1, i);
    }
    for(int i = 0; i < rowNum; i++){
        dfs(board, i, 0);
        dfs(board, i, colNum-1);
    }
    for(int i = 0; i < rowNum; i++){
        for(int j = 0; j < colNum; j++){
            if(board[i][j] == 'O'){
                board[i][j] = 'X';
            }
        }
    }
    for(int i = 0; i < rowNum; i++){
        for(int j = 0; j < colNum; j++){
            if(board[i][j] == '*'){
                board[i][j] = 'O';
            }
        }
    }
}
private void dfs(char[][] board, int row, int col) {
    // TODO Auto-generated method stub
    if(board[row][col] == 'O'){
        board[row][col] = '*';
        if(row > 1){
            dfs(board, row-1, col);
        }
        if(col > 1){
            dfs(board, row, col-1);
        }
        if(row < rowNum-1){
            dfs(board, row+1, col);
        }
        if(col < colNum-1){
            dfs(board, row, col+1);
        }
    }
}

【1】【leetcode-130】 被围绕的区域的更多相关文章

  1. Java实现 LeetCode 130 被围绕的区域

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

  2. LeetCode 130. 被围绕的区域(Surrounded Regions)

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

  3. [LeetCode] 130. 被围绕的区域

    题目链接 : https://leetcode-cn.com/problems/surrounded-regions/ 题目描述: 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O). 找到所有 ...

  4. Leetcode之深度优先搜索(DFS)专题-130. 被围绕的区域(Surrounded Regions)

    Leetcode之深度优先搜索(DFS)专题-130. 被围绕的区域(Surrounded Regions) 深度优先搜索的解题详细介绍,点击 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O) ...

  5. [LeetCode] 130. Surrounded Regions 包围区域

    Given a 2D board containing 'X' and 'O'(the letter O), capture all regions surrounded by 'X'. A regi ...

  6. 130 Surrounded Regions 被围绕的区域

    给定一个二维的矩阵,包含 'X' 和 'O'(字母 O), 找到所有被 'X' 围绕的区域.并将区域里所有 'O'用 'X' 填充.例如,X X X XX O O XX X O XX O X X运行你 ...

  7. LeetCode 被围绕的区域

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

  8. [Swift]LeetCode130. 被围绕的区域 | Surrounded Regions

    Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'. A reg ...

  9. lintcode:被围绕的区域

    被围绕的区域 给一个二维的矩阵,包含 'X' 和 'O', 找到所有被 'X' 围绕的区域,并用 'X' 填充满. 样例 给出二维矩阵: X X X X X O O X X X O X X O X X ...

随机推荐

  1. swagger2 如何匹配多个controller

    方法一:使用多个controller的共同拥有的父类,即精确到两个controller的上一级 @Bean public Docket createRestApi() { return new Doc ...

  2. 爬虫_拉勾网(解析ajax)

    拉勾网反爬虫做的比较严,请求头多添加几个参数才能不被网站识别 找到真正的请求网址,返回的是一个json串,解析这个json串即可,而且注意是post传值 通过改变data中pn的值来控制翻页 job_ ...

  3. MT【276】正切的半角公式

    若$\Delta ABC$满足:$\tan\dfrac{A}{2}\cdot\tan\dfrac{C}{2}=\dfrac{1}{3},b=\dfrac{4}{3}a$,则$\sin B=$_____ ...

  4. MT【244】调和分割

    已知椭圆方程:$\dfrac{x^2}{4}+\dfrac{y^2}{3}=1$,过点$P(1,1)$的两条直线分别与椭圆交于点$A,C$和$B,D$,且满足$\overrightarrow{AP}= ...

  5. crontab 任务带日期输出

    date命令用法#带格式输出$ date +"%Y-%m-%d"#输出1天后的日期$ date -d "1 day" +"%Y-%m-%d" ...

  6. [SNOI2017]一个简单的询问【莫队+容斥原理】

    题目大意 给你一个数列,让你求两个区间内各个数出现次数的乘积的和. 分析 数据范围告诉我们可以用莫队过. 我并不知道什么曼哈顿什么乱七八糟的东西,但是我们可以用容斥原理将这个式子展开来. \[\sum ...

  7. linux开发板出现Read-only file system的解决办法

    @2018-11-29 创建文件夹出现如下提示 mkdir: can't create directory 'test': Read-only file system 使用命令 mount rw -o ...

  8. 【nginx】nginx配置文件结构,内置变量及参数调优

    Nginx的配置文件是一个纯文本文件,它一般位于Nginx安装目录的conf目录下,整个配置文件是以block的形式组织的.每个block一般以一个大括号“{”来表示.block 可以分为几个层次,整 ...

  9. 微信小程序支付(PHP后端)

    1.申请开通小程序支付,我们正式开通的微信支付是在微信公众平台上,我们需要绑定之前的微信商户平台即可,这一点不过多强调 2.小程序支付开发步骤 (1).统一下单 大家看到微信的统一下单接口密密麻麻的一 ...

  10. gradle配置统一管理

    配置全局参数 根目录build.gradle文件: 主要关注ext部分 // Top-level build file where you can add configuration options ...