Middle-题目125:130. Surrounded Regions

原创 2016年05月31日 20:21:04

题目原文:
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 X
X O O X
X X O X
X O X X
After running your function, the board should be:
X X X X
X X X X
X X X X
X O X X
题目大意:
给出一个由’X’和’O’组成的数组,把所有被’X’围住的’O’都改成’X’。(在边缘的不用改)
题目分析:
DFS和BFS都行,只要对边缘的’O’搜索即可,搜索到的’O’都改成’B’,最后再遍历整个矩阵,把’O’改成’X’,把’B’改成’O’即可。(ac代码用的是BFS)
源码:(language:java)

public class Solution {
     private class Point {
        int x;
        int y;
        Point(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
    public void solve(char[][] board) {
        if (board == null || board.length == 0)
            return;
        int rows = board.length, columns = board[0].length;
        int[][] direction = { { -1, 0 }, { 1, 0 }, { 0, 1 }, { 0, -1 } };
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                if ((i == 0 || i == rows - 1 || j == 0 || j == columns - 1) && board[i][j] == 'O') {
                    Queue<Point> queue = new LinkedList<>();
                    board[i][j] = 'B';
                    queue.offer(new Point(i, j));
                    while (!queue.isEmpty()) {
                        Point point = queue.poll();
                        for (int k = 0; k < 4; k++) {
                            int x = direction[k][0] + point.x;
                            int y = direction[k][1] + point.y;
                            if (x >= 0 && x < rows && y >= 0 && y < columns && board[x][y] == 'O') {
                                board[x][y] = 'B';
                                queue.offer(new Point(x, y));
                            }
                        }
                    }
                }
            }
        }
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                if (board[i][j] == 'B')
                    board[i][j] = 'O';
                else if (board[i][j] == 'O')
                    board[i][j] = 'X';
            }
        }
    }
}

成绩:
12ms,beats 38.36%,众数7ms,9.03%
Cmershen的碎碎念:
好像也可以用并查集解决,但我搜到一份ac代码提交上去发现并不快,而且我也不是很熟悉并查集。就用了这份代码顺便复习下BFS的写法。

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

[leetcode-130]Surrounded Regions(java)

问题描述: Given a 2D board containing ‘X’ and ‘O’, capture all regions surrounded by ‘X’.A region is ca...
  • zdavb
  • zdavb
  • 2015年08月12日 20:39
  • 885

(LeetCode 130)Surrounded Regions(并查集)

Q: Given a 2D board containing ‘X’ and ‘O’, capture all regions surrounded by ‘X’.A region is captu...
  • u014616233
  • u014616233
  • 2016年04月20日 22:07
  • 1695

130 Surrounded Regions

题目链接:https://leetcode.com/problems/surrounded-regions/题目:Given a 2D board containing 'X' and 'O', ca...
  • ChilseaSai
  • ChilseaSai
  • 2015年12月21日 22:43
  • 1006

LeetCode(130) Surrounded Regions

题目 Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by ...
  • fly_yr
  • fly_yr
  • 2016年08月15日 22:04
  • 1048

[LeetCode]130.Surrounded Regions

Given a 2D board containing ‘X’ and ‘O’, capture all regions surrounded by ‘X’.A region is captured ...
  • SunnyYoona
  • SunnyYoona
  • 2015年02月06日 22:28
  • 1598

Leetcode Surrounded Regions 解题报告

http://oj.leetcode.com/problems/surrounded-regions/ Given a 2D board containing 'X' and 'O', captur...
  • worldwindjp
  • worldwindjp
  • 2014年02月15日 20:57
  • 4589

LeetCode *** 130. Surrounded Regions

题目: Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is...
  • treeshy
  • treeshy
  • 2016年04月27日 15:38
  • 102

LeetCode 130. Surrounded Regions

逆向思维,从边缘的O出发(上下左右四排的O),进行DFS, 将这些'O'可达的所有点'O'都标记为'Z'(包括它们自身也标记为O), 这些'Z'最终都可以保持为'O'不变,而其他点应该都变成'X'. ...
  • u014674776
  • u014674776
  • 2015年02月15日 11:01
  • 516

Leetcote 130. Surrounded Regions

130. Surrounded Regions 题目要求: 在一个二维平面上有至少被'0'或者'X'填满,要求当‘O’被'X包围时:除非'O'就在边界或者'O'临近的'O'也在边界,否则将被‘P’代替...
  • yanerhao
  • yanerhao
  • 2017年05月18日 22:32
  • 168

130. Surrounded Regions(BFS)

题目: Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by...
  • u011539372
  • u011539372
  • 2016年08月21日 23:22
  • 69
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Middle-题目125:130. Surrounded Regions
举报原因:
原因补充:

(最多只允许输入30个字)