[leetcode] 130. Surrounded Regions 解题报告
来源:互联网 发布:early stopping算法 编辑:程序博客网 时间:2024/06/03 16:19
题目链接:https://leetcode.com/problems/surrounded-regions/
Given a 2D board containing 'X'
and 'O'
, capture all regions surrounded by 'X'
.
A region is captured by flipping all 'O'
s into 'X'
s in that surrounded region.
For example,
X X X XX O O XX X O XX O X X
After running your function, the board should be:
X X X XX X X XX X X XX O X X
思路:如果直接从一个'O'开始搜索判断是不是会到达边界,将会非常麻烦,因为需要保存路径上的每个'O',如果到达边界就放弃这片区域的所有值,否则将其变为'X'。有一种更为聪明的做法是从四个边界出发,用DFS算法将从边界开始的'O'的区域都变成另外一个临时的值,这样做完之后剩下的‘O’将会是被包围的,然后将其变为‘X’,再将临时的值变为'O'即可。简单粗暴!
代码如下:
class Solution {public: void DFS(vector<vector<char>>& board, int i, int j) { board[i][j] = '1'; if(i+1 < board.size() && board[i+1][j] == 'O') DFS(board, i+1, j); if(i-1 > 0&& board[i-1][j] == 'O') DFS(board, i-1, j); if(j-1 > 0&& board[i][j-1] == 'O') DFS(board, i, j-1); if(j+1 < board[0].size()&& board[i][j+1] == 'O') DFS(board, i, j+1); } void solve(vector<vector<char>>& board) { if(board.size() ==0) return; int m = board.size(), n = board[0].size(); for(int i=0; i<m; i++) if(board[i][0]=='O') DFS(board, i, 0); for(int i=0; i<m; i++) if(board[i][n-1]=='O') DFS(board, i, n-1); for(int i=0; i<n; i++) if(board[m-1][i]=='O') DFS(board, m-1, i); for(int i=0; i<n; i++) if(board[0][i]=='O') DFS(board, 0, i); for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) if(board[i][j] == '1') board[i][j] = 'O'; else if(board[i][j] == 'O') board[i][j] = 'X'; }};参考:https://leetcode.com/discuss/42445/a-really-simple-and-readable-c-solution%EF%BC%8Conly-cost-12ms
0 0
- [leetcode] 130. Surrounded Regions 解题报告
- [Leetcode] 130. Surrounded Regions 解题报告
- Leetcode Surrounded Regions 解题报告
- 【LeetCode】Surrounded Regions 解题报告
- [LeetCode]Surrounded Regions,解题报告
- [LeetCode]130.Surrounded Regions
- LeetCode 130. Surrounded Regions
- [leetcode] 130.Surrounded Regions
- Leetcode 130. Surrounded Regions
- leetcode 130. Surrounded Regions
- leetcode 130. Surrounded Regions
- LeetCode 130. Surrounded Regions
- [LeetCode]130. Surrounded Regions
- LeetCode 130. Surrounded Regions
- LeetCode *** 130. Surrounded Regions
- Leetcode 130. Surrounded Regions
- [leetcode] 130. Surrounded Regions
- LeetCode-130.Surrounded Regions
- virtualbox中安装ubuntu Server
- vim的一般配置
- 关于编码ansi、GB2312、unicode与utf-8的区别
- Qt4.8 移植
- jdk与jre的区别及关系
- [leetcode] 130. Surrounded Regions 解题报告
- js 创建对象
- CSShack大全
- 使文字出现波纹效果--第三方开源--Titanic
- win7安装oracle1方法2c问题及解决- [INS-30131] 执行安装程序验证所需的初始设置失败。
- xcode armv6 armv7 armv7s arm64
- LeetCode 278 First Bad Version(第一个坏版本)(二分法)(*)
- Python教程学习简记1--Python数据类型和变量 字符串和编码 list和tuple 条件判断 循环 dict和set
- [Codecademy] HTML&CSS 第一课:HTML Basic