Surrounded Regions - LeetCode
题目链接
https://leetcode.com/problems/surrounded-regions/
注意点
- 边缘不算包围‘O’
解法
解法一:dfs。找处在边缘上的O然后dfs将与之相邻的O都改为#。处理完之后再把这时候的O改为X,#改为O即可
class Solution {
public:
void solve(vector<vector<char>>& board) {
int n = board.size();
for(int i = 0;i < n;i++)
{
for(int j = 0;j < board[i].size();j++)
{
if((i == 0 || i == n-1 || j == 0 ||j == board[i].size()-1) && board[i][j] == 'O') dfs(board,i,j);
}
}
for(int i = 0;i < n;i++)
{
for(int j = 0;j < board[i].size();j++)
{
if(board[i][j] == 'O') board[i][j] = 'X';
if(board[i][j] == '#') board[i][j] = 'O';
}
}
}
void dfs(vector<vector<char>>& board,int i,int j)
{
if (board[i][j] == 'O')
{
board[i][j] = '#';
if (i > 0 && board[i - 1][j] == 'O')
dfs(board, i - 1, j);
if (j < board[i].size() - 1 && 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 > 0 && board[i][j - 1] == 'O')
dfs(board, i, j - 1);
}
}
};

解法二:bfs。基本上一样的思路,还是找处在边缘上的O然后bfs将与之相邻的O都改为#。处理完之后再把这时候的O改为X,#改为O即可
class Solution {
public:
void solve(vector<vector<char>>& board) {
int n = board.size();
for(int i = 0;i < n;i++)
{
for(int j = 0;j < board[i].size();j++)
{
if((i == 0 || i == n-1 || j == 0 ||j == board[i].size()-1) && board[i][j] == 'O') dfs(board,i,j);
}
}
for(int i = 0;i < n;i++)
{
for(int j = 0;j < board[i].size();j++)
{
if(board[i][j] == 'O') board[i][j] = 'X';
if(board[i][j] == '#') board[i][j] = 'O';
}
}
}
void dfs(vector<vector<char>>& board,int i,int j)
{
if (board[i][j] == 'O')
{
board[i][j] = '#';
if (i > 0 && board[i - 1][j] == 'O')
dfs(board, i - 1, j);
if (j < board[i].size() - 1 && 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 > 0 && board[i][j - 1] == 'O')
dfs(board, i, j - 1);
}
}
};

小结
- 这道题dfs和bfs效率都差不多
Surrounded Regions - LeetCode的更多相关文章
- Surrounded Regions——LeetCode
Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...
- Surrounded Regions leetcode java
题目: Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is capt ...
- [LeetCode] Surrounded Regions 包围区域
Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...
- 验证LeetCode Surrounded Regions 包围区域的DFS方法
在LeetCode中的Surrounded Regions 包围区域这道题中,我们发现用DFS方法中的最后一个条件必须是j > 1,如下面的红色字体所示,如果写成j > 0的话无法通过OJ ...
- 【LeetCode】130. Surrounded Regions (2 solutions)
Surrounded Regions Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A ...
- Leetcode之深度优先搜索(DFS)专题-130. 被围绕的区域(Surrounded Regions)
Leetcode之深度优先搜索(DFS)专题-130. 被围绕的区域(Surrounded Regions) 深度优先搜索的解题详细介绍,点击 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O) ...
- [LeetCode] 130. Surrounded Regions 包围区域
Given a 2D board containing 'X' and 'O'(the letter O), capture all regions surrounded by 'X'. A regi ...
- 【leetcode】Surrounded Regions
Surrounded Regions Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A ...
- leetcode 200. Number of Islands 、694 Number of Distinct Islands 、695. Max Area of Island 、130. Surrounded Regions
两种方式处理已经访问过的节点:一种是用visited存储已经访问过的1:另一种是通过改变原始数值的值,比如将1改成-1,这样小于等于0的都会停止. Number of Islands 用了第一种方式, ...
随机推荐
- Redis命令总结 (转)
Redis命令总结 连接操作相关的命令 quit:关闭连接(connection) auth:简单密码认证 持久化 save:将数据同步保存到磁盘 bgsave:将数据异步保存到磁盘 lastsa ...
- [Oracle][Corruption]发生ORA00600[kdsgrp1]的时候,如何进行调查
本质上,这很可能是坏块引发的,所以需要调查 关联的Table 中的坏块状况: Excerpt of trace file============================*** 2017-08- ...
- Intel x86_64 Architecture Background 2
这里是在学习Intel x86_64体系架构时学习到的一些概念,记录下来以供日后参考.如果有错的地方,欢迎指正! CPU上下文切换(context switch): 这个概念第一次听到对我来说是完全陌 ...
- Effective C++学习笔记之explicit
关键字: explicit意思为“明确的”和“清楚的”,是C++的关键词,意在阻止隐式类型的转换: 使用原因: 有时候不合法的隐式转换,会让乖巧听话的程序变得不可控.所以适当地使用explicit关键 ...
- Bash 中常见的字符串操作
获取字符串长度 ${#string} MyString=abcABC123ABCabc 注意这会自动去掉字符串结尾处的空格,如果在字符串中包含空格(开头.中间或结尾),就需要使用引号把字符串包裹起来: ...
- BGFX 渲染引擎中着色器代码的调试方法
在实时渲染的图形开发中,着色器代码(Shader)越来越复杂,于是单纯的靠经验和不断试错的开发和调试方法早已不能满足实际需求.使用调试工具进行调试,成为开发中重要的方法.Bgfx 是一款跨平台.抽象封 ...
- Linux实践三:程序破解
一.汇编指令机器码 二.反汇编与十六进制编程器 三.可执行文件的基本格式 hexdump -x login 用16进制数字显示login内容 objdump -x login 显示login中各个段以 ...
- 20135327郭皓--Linux内核分析第七周 可执行程序的装载
第七周 可执行程序的装载 郭皓 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 ...
- 第三个sprint冲刺第三阶段
公测版:
- HDOJ2004_成绩转换
水题:用数组标识各个阶段分数的等级即可. HDOJ2004_成绩转换 #include<stdio.h> #include<stdlib.h> #include<math ...