Complete-Preparation

🎉 One-stop destination for all your technical interview Preparation 🎉

View the Project on GitHub

130. Surrounded Regions 🌟🌟

Given an m x n matrix board containing ‘X’ and ‘O’, capture all regions that are 4-directionally surrounded by ‘X’.

A region is captured by flipping all ‘O’s into ‘X’s in that surrounded region.

DFS Approach complex

DFS Approach more efficient

Code

class Solution{
private:
	vector<int> dirs = {1, 0, -1, 0, 1};

	void dfs(vector<vector<char>> &board, int i, int j)
	{
		if (i < 0 || j < 0 || i >= board.size() || j >= board[0].size() || board[i][j] != 'O') return;

		board[i][j] = '1';
		for (int k = 0; k < 4; k++){
			int nr = i + dirs[k], nc = j + dirs[k + 1];
			dfs(board, nr, nc);
		}
	}

public:
	void solve(vector<vector<char>> &board)
	{
		int r = board.size();
		int c = board[0].size();

		for (int i = 0; i < r; i++){ // first and last col
			dfs(board, i, 0);
			dfs(board, i, c - 1);
		}
		for (int j = 0; j < c; j++){ // first and last row
			dfs(board, 0, j);
			dfs(board, r - 1, j);
		}

		for (int i = 0; i < r; i++){
			for (int j = 0; j < c; j++){
				board[i][j] = (board[i][j] == '1') ? 'O' : 'X';
			}
		}
	}
};