博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode----130. Surrounded Regions
阅读量:4112 次
发布时间:2019-05-25

本文共 1872 字,大约阅读时间需要 6 分钟。

链接:

大意:

给定一个二维字符数组board,board中每个字符都是'X'或者'O'。现在要求将所有被'X'包围'O'变为'X'。规定:在边界上的'O'默认不被'X'包围。例子:

思路:

图的DFS。

  • 利用DFS,将board的各个边界为'O'以及与其连接的'O'全部变为'#'('#'为任意字符,只要不是'X'或者'O'就行)。这些被变成'#'的'O'是那些不会被变为'X'的'O',最终会把'#'变回'O'。
  • 将board中所有的'O'变为'X'
  • 将board中所有的'#'变为'O'

代码:

class Solution {    public void solve(char[][] board) {        if (board.length <= 1)            return ;        // 使用dfs将边界以及与其相连接的'O'变为'#'        for (int j = 0; j < board[0].length; j++) {            // 第一行            if (board[0][j] == 'O')                dfs(board, 0, j);            // 最后一行            if (board[board.length - 1][j] == 'O')                dfs(board, board.length - 1, j);        }        for (int i = 0; i < board.length; i++) {            // 第一列            if (board[i][0] == 'O')                dfs(board, i, 0);            // 最后一列            if (board[i][board[0].length - 1] == 'O')                dfs(board, i, board[0].length - 1);        }        // 将board中所有的'O'变为'X'        for (int i = 0; i < board.length; i++) {            for (int j = 0; j < board[0].length; j++) {                if (board[i][j] == 'O')                    board[i][j] = 'X';            }        }        // 将board中所有的'#'变为'O'        for (int i = 0; i < board.length; i++) {            for (int j = 0; j < board[0].length; j++) {                if (board[i][j] == '#')                    board[i][j] = 'O';            }        }    }    public void dfs(char[][] board, int r, int c) {        board[r][c] = '#';        if (r - 1 >= 0 && board[r - 1][c] == 'O')            dfs(board, r - 1, c);        if (r + 1 < board.length && board[r + 1][c] == 'O')            dfs(board, r + 1, c);        if (c - 1 >= 0 && board[r][c - 1] == 'O')            dfs(board, r, c - 1);        if (c + 1 < board[0].length && board[r][c + 1] == 'O')            dfs(board, r, c + 1);    }}

结果:

结论:

对board进行了3次遍历,但是时间效率还是很高的。但为什么这个空间效率这么低???

 

 

转载地址:http://dxesi.baihongyu.com/

你可能感兴趣的文章
Java泛型
查看>>
Java注解
查看>>
Java_IO流
查看>>
mysql笔记
查看>>
JDBC笔记
查看>>
Mybatis复习_1
查看>>
mybatis_maven_坐标
查看>>
Mybatis核心配置文件
查看>>
java.io.IOException: Could not find resource mybatis-config.xml
查看>>
xxxMapper.xml
查看>>
mybatis_properties
查看>>
idea debug 首先进入 URlLClassLoader 解决办法
查看>>
冒泡排序
查看>>
存储过程怎么使用
查看>>
Java实习生面试题与笔试题
查看>>
Docker+Kubernetes(K8s)企业级架构师实战视频教程-2021最新
查看>>
centos7.7安装部署docker
查看>>
Docker容器的4种网络模式详解
查看>>
android超时问题
查看>>
android中的布局错误
查看>>