477-被围绕的区域

给一个二维的矩阵,包含 'X' 和 'O', 找到所有被 'X' 围绕的区域,并用 '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

X O X X

标签

Union Find 宽度优先搜索

思路

先从外围开始,身处外围的 O 是无法被包围的,同理,与一个无法被包围的 O 相连的 O 也是无法被包围的。

  • 从外围开始,若遇到外围的 O,则将其标记为 #,意味无法被包围的 O
  • 接着从这个 O 开始,使用深度遍历或广度遍历,将与之相连的 O 一并标记为 #
  • 最后,遍历数组,将无法被包围的 O,此时被标记为 # 改为 O,其余 X 不变,可以被包围的O,此时被标记为O 变为 X

code

class Solution {
public:
/**
* @param board a 2D board containing 'X' and 'O'
* @return void
*/
void surroundedRegions(vector<vector<char>>& board) {
// Write your code here
int sizeRow = board.size();
if (sizeRow <= 0) {
return ;
}
int sizeCol = board[0].size();
if (sizeCol <= 0) {
return ;
}
// 从外围开始
int i = 0, j = 0;
for (j = 0; j < sizeCol; j++) {
// 上围
if (board[0][j] == 'O') {
DFS(board, 0, j);
}
// 下围
if (board[sizeRow - 1][j] == 'O') {
DFS(board, sizeRow - 1, j);
}
}
for (i = 0; i < sizeRow; i++) {
// 左围
if (board[i][0] == 'O') {
DFS(board, i, 0);
}
// 右围
if (board[i][sizeCol - 1] == 'O') {
DFS(board, i, sizeCol - 1);
}
} for (i = 0; i < sizeRow; i++) {
for (j = 0; j < sizeCol; j++) {
if (board[i][j] == '#') {
board[i][j] = 'O';
}
else if (board[i][j] == 'O') {
board[i][j] = 'X';
}
}
}
} void DFS(vector<vector<char>>& board, int i, int j) {
if (i < board.size() && j < board[0].size()) {
board[i][j] = '#';
if (i > 0 && board[i - 1][j] == 'O') {
DFS(board, i - 1, j);
}
if (j > 0 && board[i][j - 1] == 'O') {
DFS(board, i, j - 1);
}
if (i < board.size() - 1 && board[i + 1][j] == 'O') {
DFS(board, i + 1, j);
}
if (j < board[0].size() - 1 && board[i][j + 1] == 'O') {
DFS(board, i, j + 1);
}
}
}
};

lintcode-477-被围绕的区域的更多相关文章

  1. lintcode:被围绕的区域

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

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

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

  3. 【1】【leetcode-130】 被围绕的区域

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

  4. 286被围绕的区域 · Surrounded Regions

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

  5. 130 Surrounded Regions 被围绕的区域

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

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

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

  7. LeetCode 被围绕的区域

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

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

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

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

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

随机推荐

  1. ElasticSearch优化系列四:ES的heap是如何被瓜分掉的

    以下分别解读几个我知道的内存消耗大户: Segment Memory Segment不是file吗?segment memory又是什么?前面提到过,一个segment是一个完备的lucene倒排索引 ...

  2. ThinkPHP5.1 前置操作说明

    可以为某个或者某些操作指定前置执行的操作方法,设置 beforeActionList属性可以指定某个方法为其他方法的前置操作,数组键名为需要调用的前置方法名,无值的话为当前控制器下所有方法的前置方法. ...

  3. Fiddler无所不能——之测试开发攻城狮必备利器

    Fiddler无所不能——之测试开发攻城狮必备利器 1.模拟真实网络环境4g网.3g网络.2g网络.弱网.请求超时 开启弱网Rules——Performance——勾选Simulate Modem S ...

  4. Why mobile web apps are slow

    http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/ I’ve had an unusual number of interest ...

  5. 20155215 《Java程序设计》实验一(Java开发环境的熟悉)实验报告

    20155215 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑 ...

  6. 20155305 2016-2017-2 《Java程序设计》实验一 Java开发环境的熟悉(macOS + IDEA)

    20155305 2016-2017-2 <Java程序设计>实验一 Java开发环境的熟悉(macOS + IDEA) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用E ...

  7. 《Java 程序设计》课堂实践二

    题目 设计并实现一个Book类,定义义成Book.java,Book 包含书名,作者,出版社和出版日期,这些数据都要定义getter和setter.定义至少三个构造方法,接收并初始化这些数据.覆盖(O ...

  8. week14课上测试

    说明 本次测试老师将所有课下测试的易错题全部重新考察了一遍,虽然是第二次做,还提前复习过,还是错了很多,回到寝室发现老师还没有结束测试,43分的我又忍不住再做了一遍. 做第二遍发现了有几个题目是蓝墨云 ...

  9. Python:静态方法、类方法、实例方法

    1. 静态方法@staticmethod (1)无需自身对象的self参数和自身类的cls参数,可直接通过 类名.方法名 进行调用 (2)Python中并不是真正意义上的静态方法,因为类定义本身就是个 ...

  10. 后端API入门到放弃指北

    后端API入门学习指北 了解一下一下概念. RESTful API标准] 所有的API都遵循[RESTful API标准]. 建议大家都简单了解一下HTTP协议和RESTful API相关资料. 阮一 ...