[leetcode] Surrounded Regions
来源:互联网 发布:类似onedrive的软件 编辑:程序博客网 时间:2024/05/17 03:33
From : 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
class Solution {public: void solve(vector<vector<char> >& board) { if(!board.size() || !board[0].size()) return; m=board.size(), n=board[0].size(); for(int i=0; i<m; i++) {if(board[i][0]=='O') search(board, i ,0);if(board[i][n-1]=='O') search(board, i ,n-1); } for(int i=0; i<n; i++) {if(board[0][i]=='O') search(board, 0, i);if(board[m-1][i]=='O') search(board, m-1, i); }for(int i=0; i<m; i++) {for(int j=0; j<n; j++) {if(board[i][j]=='O') board[i][j]='X';else if(board[i][j]=='P') board[i][j]='O';}} } void search(vector<vector<char> >& board, int i, int j) {queue<point> q;q.push(point(i, j));board[i][j] = 'P';while(!q.empty()) {point p = q.front(); q.pop();i = p.x;j = p.y;if(i-1>=0 && board[i-1][j]=='O') { q.push(point(i-1, j)); board[i-1][j] = 'P';}if(i+1< m && board[i+1][j]=='O') { q.push(point(i+1, j)); board[i+1][j] = 'P';}if(j-1>=0 && board[i][j-1]=='O') { q.push(point(i, j-1)); board[i][j-1] = 'P';}if(j+1< n && board[i][j+1]=='O') { q.push(point(i, j+1)); board[i][j+1] = 'P';}} }private:struct point{int x;int y;point(int i, int j):x(i),y(j) {}};int n, m;};这道题应该注意,在入队的时候,将board更新,而不是出队的时候更新。
public class Solution {private static class Point {int X;int Y;public Point(int x, int y) {X = x;Y = y;}}private int m, n;private int[] X = { 1, 0, -1, 0 };private int[] Y = { 0, 1, 0, -1 };public void solve(char[][] board) {if (board == null || board.length == 0) {return;}m = board.length;n = board[0].length;for(int i=0; i<m; ++i) { if(board[i][0] == 'O') { set(board, i, 0); } if(board[i][n-1] =='O') { set(board, i, n-1); }}for(int j=0; j<n;++j) { if(board[0][j] == 'O') { set(board, 0, j); } if(board[m-1][j] == 'O') { set(board, m-1, j); }}for(int i=0; i<m; ++i) { for(int j=0; j<n; ++j) { if(board[i][j] == '-') { board[i][j] = 'O'; } else if(board[i][j] == 'O') { board[i][j] = 'X'; } }} }private void set(char[][] board, int i, int j) {Queue<Point> q = new LinkedList<Point>();board[i][j] = '-';q.add(new Point(i, j));while (!q.isEmpty()) {Point p = q.poll();int a = p.X;int b = p.Y;for (int k = 0; k < 4; ++k) {int x = a + X[k];int y = b + Y[k];if (valid(x, y) && board[x][y] == 'O') { board[x][y] = '-';q.add(new Point(x, y));}}}}private boolean valid(int x, int y) {return x >= 0 && x < m && y >= 0 && y < n;}}
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 详解
- 安装好ipvsadm后需要查看是否加载了ip_vs模块儿,没有需要手动加载。
- about pulltorefreshdemo
- 上课知识
- MCU GPIO模拟I2C
- uleb128、sleb128和uleb128p1编码格式介绍
- [leetcode] Surrounded Regions
- socket通信常用的函数
- 电影 杭州景点
- 文章标题
- 解读新GRE填空双空题的词项释义解析方法
- [leetcode][DP] Palindrome Partitioning II
- Java基础——GUI
- Android主题应用
- 大数相加相减相乘