- 题目链接:https://leetcode.com/problems/surrounded-regions/
- 题目思路:
- 找到所有的O的区域,将O的区域全标记为S;
- 检测所有的O的区域,有没有在边界的点
- 如果有,证明不会被X包围,将S改成O
- 如果没有,证明可以被X包围,将S改为X
- 遇到的bug
- pair不知道怎么用:vector<pair<int. int>> res; res.push_back(make_pair(a, b))
- 检测所有O区域的时候,没有把第一个O的坐标记录下来
- 附上代码: https://leetcode.com/submissions/detail/233732937/
class Solution { int row_num; int col_num; int x_change[4] = {0, 0, -1, 1}; int y_change[4] = {-1, 1, 0, 0}; public: void solve(vector<vector<char>>& board) { row_num = board.size(); if (row_num == 0) return; col_num = board[0].size(); vector<vector<pair<int, int>>> res; for (int i = 0 ;i < row_num; i++) { for (int j = 0; j < col_num; j++) { vector<pair<int, int>> area; if (board[i][j] == 'O') { area.push_back(make_pair(i, j)); findSurroundedO(i, j, area, board); res.push_back(area); } } } for (int i = 0; i < res.size(); i++) { vector<pair<int, int>> area = res[i]; bool flag = true; for(int j = 0; j < area.size(); j++) { if (judgeBoundary(area[j].first, area[j].second)) { flag = false; changeChars(area, board, 'O'); break; } } if (flag) { changeChars(area, board, 'X'); } } } void changeChars(vector<pair<int, int>> area, vector<vector<char>>& board, char a) { for (int i = 0; i < area.size(); i++) { board[area[i].first][area[i].second] = a; } } bool judgeBoundary(int x, int y) { if (x == 0 || y ==0 || x == (row_num-1) || y == (col_num-1)) return true; return false; } void findSurroundedO(int x, int y, vector<pair<int, int>>& area, vector<vector<char>>& board){ int cur_x; int cur_y; for (int i = 0; i < 4; i++) { cur_x = x + x_change[i]; cur_y = y + y_change[i]; if (cur_x >=0 && cur_x < row_num && cur_y >=0 && cur_y < col_num) { if (board[cur_x][cur_y] == 'O') { pair<int, int> pos; area.push_back(make_pair(cur_x, cur_y)); board[cur_x][cur_y] = 'S'; findSurroundedO(cur_x, cur_y, area, board); } } } return; } };
leetcode 130. Surrounded Regions
最新推荐文章于 2020-09-27 10:38:30 发布