LeetCode|Surrounded Regions
来源:互联网 发布:淘宝店铺一年费用多少 编辑:程序博客网 时间:2024/05/21 19:25
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如果在出现在边缘则没有被围住。最朴素的想法是搜索找有没有碰到边界。我第一次用DFS做的,大数据,200*200的矩阵,发生 Runtime Error ,原因理所应当的爆栈了。尝试过inline也不能通过。
贴上DFS的代码:
class Solution {public: void solve(vector<vector<char> >& board) { if((m = board.size()) == 0 || (n = board[0].size()) == 0) return; for(int i = 0; i < m; i++) for(int j = 0; j < n; j++){ if(board[i][j] == 'O'){ bool captured = dfs(board, i, j); if(captured) flipping(board, i, j); } } for(int i = 0; i < m; i++) for(int j = 0; j < n; j++){ if(board[i][j] == 'o') board[i][j] = 'O'; } }private: int m, n; int di[4] = {1, -1, 0 ,0}; int dj[4] = {0, 0, -1, 1}; bool dfs(vector<vector<char> >& grid, int i, int j){ grid[i][j] = 'o'; for(int k = 0; k < 4; k++){ int newi = i + di[k]; int newj = j + dj[k]; if(newi < 0 || newi == m || newj < 0 || newj == n) return false; if(grid[newi][newj] == 'O' && !dfs(grid, newi, newj)) return false; } return true; // true for captured } void flipping(vector<vector<char> >& grid, int i, int j){ grid[i][j] = 'X'; for(int k = 0; k < 4; k++){ int newi = i + di[k]; int newj = j + dj[k]; if(newi < 0 || newi == m || newj < 0 || newj == n) continue; if(grid[newi][newj] == 'o') flipping(grid, newi, newj); } }};
再次考虑,只有边界的O才需要保留。搜索边界把O用BFS标记一下,然后遍历内部,碰到的其他的O直接改为X。
TBD 需要补一下深搜、宽搜在栈空间、内存使用上的相关知识再回来做。
0 0
- LeetCode : Surrounded Regions
- [leetcode] Surrounded Regions
- leetcode 128: Surrounded Regions
- LeetCode 39: Surrounded Regions
- 【leetcode】Surrounded Regions
- LeetCode - Surrounded Regions
- LeetCode之Surrounded Regions
- leetcode:Surrounded Regions
- [LeetCode]Surrounded Regions
- LeetCode - Surrounded Regions
- [Leetcode]Surrounded Regions
- Leetcode Surrounded Regions
- [leetcode]Surrounded Regions
- leetcode Surrounded Regions
- Leetcode: Surrounded Regions
- LeetCode-Surrounded Regions
- [leetcode] Surrounded Regions
- leetcode Surrounded Regions 详解
- 【bzoj1369】【Baltic2003】【Gem】【树形dp】
- WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping
- /bin/sh: 1: /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc: not found
- 如何从Hadoop官网下载hadoop开发包
- springMvc
- LeetCode|Surrounded Regions
- ubuntu 执行apt-get 提示Not found或者校验失败的请款
- forward和include的区别
- 利用Fiddler进行模拟限速测试
- Android错误记录——layout文件无法加载
- HashMap数据引用时,增加key-value键值对
- android 动画 ——alpha、scale、translate、rotate、set的xml属性及用法
- Nginx 与 Tomcat 配置及优化
- MyBatis整体Review