[leetcode]240. Search a 2D Matrix II
Analysis
raining outside…—— [每天刷题并不难0.0]
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
- Integers in each row are sorted in ascending from left to right.
- Integers in each column are sorted in ascending from top to bottom.
Explanation:
DFS or BFS
Implement
DFS:
class Solution {
public:
int numIslands(vector<vector<char>>& grid) {
m = grid.size();
if(m == 0)
return 0;
n = grid[0].size();
int res = 0;
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
if(grid[i][j] == '1'){
res++;
DFS(grid, i, j);
}
}
}
return res;
}
void DFS(vector<vector<char>>& grid, int x, int y){
if(x<0 || x>=m || y<0 || y>=n || grid[x][y] == '0')
return ;
grid[x][y] = '0';
for(int i=0; i<4; i++){
int xx = x+dir[i][0];
int yy = y+dir[i][1];
DFS(grid, xx, yy);
}
}
private:
int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
int m, n;
};
BFS:
class Solution {
public:
int numIslands(vector<vector<char>>& grid) {
m = grid.size();
if(m == 0)
return 0;
n = grid[0].size();
int res = 0;
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
if(grid[i][j] == '1'){
res++;
grid[i][j] = '0';
queue<pair<int, int>> next;
next.push({i, j});
while(!next.empty()){
pair<int, int> tmp = next.front();
next.pop();
int x = tmp.first;
int y = tmp.second;
for(int i=0; i<4; i++){
int xx = x+dir[i][0];
int yy = y+dir[i][1];
if(xx>=0 && xx<m && yy>=0 && yy<n && grid[xx][yy]=='1'){
grid[xx][yy] = '0';
next.push({xx, yy});
}
}
}
}
}
}
return res;
}
private:
int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
int m, n;
};