leetcode 130 —— Sum Root to Leaf Numbers

来源:互联网 发布:锐捷mac客户端最新 编辑:程序博客网 时间:2024/06/01 10:32

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

思路1: 暴力法,343ms,差一点超时

class Solution {public:void solve(vector<vector<char>>& board) {bool flag = true;int m = board.size();if (m == 0) return;int n = board[0].size();for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){if (board[i][j] == 'X')continue;if (board[i][j] == 'O'){if (check(board, i, j)){board[i][j] = 'Y';}//else{//recover(board, i, j);//}}}}while (flag){flag = false;for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){if (board[i][j] == 'O'){recover(board, i, j,flag);}}}}for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){if (board[i][j] == 'Y')board[i][j] = 'X';}}}bool check(vector<vector<char>>& board, int i, int j){bool left, right, up, down;left = right = up = down = false;for (int m = i - 1; m >= 0; m--){if (board[m][j] == 'X'){left = true;break;}}for (int m = i + 1; m < board.size(); m++){if (board[m][j] == 'X'){right = true;break;}}for (int m = j - 1; m >= 0; m--){if (board[i][m] == 'X'){up = true;break;}}for (int m = j + 1; m < board[0].size(); m++){if (board[i][m] == 'X'){down = true;break;}}return left&&right&&up&&down;}//把Y变成Ovoid recover(vector<vector<char>>& board, int i, int j,bool& flag){  for (int m = i - 1; m >= 0; m--){if (board[m][j] == 'Y'){board[m][j] = 'O';flag = true;}if (board[m][j] == 'X')break;}for (int m = i + 1; m < board.size(); m++){if (board[m][j] == 'Y'){board[m][j] = 'O';flag = true;}if (board[m][j] == 'X')break;}for (int m = j - 1; m >= 0; m--){if (board[i][m] == 'Y'){board[i][m] = 'O';flag = true;}if (board[i][m] == 'X')break;}for (int m = j + 1; m < board[0].size(); m++){if (board[i][m] == 'Y'){flag = true;board[i][m] = 'O';}if (board[i][m] == 'X')break;}}  //把Y变成O};


0 0