题解
和200. 岛屿数量题目相似
用dfs 搜索
1.首先 \ 或者\ 扩大为3倍应该比较好算一些,首先进行遍历,把边界都标记为1,然后搜索为0的区域的个数,搜索一个区域res++,最后res即为最终结果。
代码如下
class Solution {
public:
void dfs(vector<vector<int>>&g ,int i,int j){
if(i >= 0 && i < g.size() && j >= 0 && j < g[0].size() && g[i][j] == 0){
g[i][j] = 1;
dfs(g,i+1,j);
dfs(g,i-1,j);
dfs(g,i,j+1);
dfs(g,i,j-1);
}
}
int regionsBySlashes(vector<string>& grid) {
int res = 0;
vector<vector<int>> g(grid.size()*3,vector<int>(grid[0].size()*3,0));
for(int i = 0; i <grid.size();i++){
for(int j = 0; j <grid.size(); j++){
if(grid[i][j] == '/')
g[i*3 + 2][j*3] = g[i*3 + 1][j*3 + 1] = g[i*3][j*3 + 2] = 1;
else if(grid[i][j] == '\\')
g[i*3][j*3] = g[i*3 + 1][j*3 + 1] = g[i*3 + 2][j*3 + 2] = 1;
}
}
for(int i = 0; i < g.size(); i++){
for(int j = 0; j < g[0].size();j++){
if(g[i][j] == 0){
dfs(g,i,j);
res++;
}
}
}
return res;
}
};