(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. 【XSY1528】azelso 概率&期望DP

    题目大意 有一条很长很长的路(出题人的套路),你在\(0\)位置,你要去\(h\)位置. ​ 路上有一些不同的位置上有敌人,你要和他战斗,你有\(p\)的概率赢.若你赢,则你可以走过去,否则你会死.还 ...

  2. hihocoder#1333 : 平衡树·Splay2 (区间操作)

    题面: #1333 : 平衡树·Splay2 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:好麻烦啊~~~~~ 小Hi:小Ho你在干嘛呢? 小Ho:我在干活啊! ...

  3. 前后端分离之vue2.0+webpack2 实战项目 -- html模板拼接

    对于前后端分离,如何把一个页面的公共部分比如head, header, footer, content等组合成一个完整的html 是一个值得考虑的地方. 对于php,我们可以利用include加载其他 ...

  4. 栈长这里是生成了一个 Maven 示例项目。

    Spring Cloud 的注册中心可以由 Eureka.Consul.Zookeeper.ETCD 等来实现,这里推荐使用 Spring Cloud Eureka 来实现注册中心,它基于 Netfl ...

  5. Hdoj 1160.FatMouse's Speed 题解

    Problem Description FatMouse believes that the fatter a mouse is, the faster it runs. To disprove th ...

  6. 清理XFCE4卸载残留

    apt-get remove xfce4 apt-get remove xfce4* apt-get autoremove apt-get autoclean apt-get clean --- 更新 ...

  7. day15-集合

    快捷键: 先定义name,age再利用快捷键生成,Alt+shift+s +c:空参 Alt+shift+s +o:有参 Alt+shift+s +r:set&get方法Ctrl+shift+ ...

  8. 洛谷P2336 喵星球上的点名

    解:SAM + 线段树合并 + DFS序. 姓和名之间插入特殊字符,转化为下题: 给定串集合S,T,问S中每个串包含了T中的几个串?T中每个串被多少个S中的串包含? 解:对S建广义SAM,并线段树合并 ...

  9. 对PDF的操作

    PDF是个常见的格式,当我们需要对PDF做操作时,可以主要利用PDFbox和itext.这里主要介绍PDfbox,itext自己去 查找资料.添加pom配置. <dependency> & ...

  10. 真的无语, 今天遇到一个奇葩的事情: http 会话劫持

    今天一个用户反应说软件一运行就提示错误,然后关闭. 然后用户截屏发给我看了一下,我一看,无语了. 在软件中显示的正常一段文字说明尾部出现 <script src="http://ad. ...