数岛屿
47个用例过了42 ,用了一个图色彩的方法,标记图书,然后调过,调用栈过长,肯能要优化一下
附录GDB 调试的源码
#include#include using namespace std; class Solution { bool Inmap(int i ,int j,vector >& grid){ if(i < 0 || j < 0) return false; if(i == grid.size() || j == grid[0].size()) return false; return true; } void display(vector >& grid){ for(int i=0;i >& grid,int i,int j,int &num){ if(grid[i][j]){ if(Inmap(i+1,j,grid) && grid[i+1][j] == '1') { grid[i+1][j] = num; Map(grid,i+1,j,num); } if(Inmap(i,j+1,grid) && grid[i][j+1] == '1' ) { grid[i][j+1] = num; Map(grid,i,j+1,num); } if( Inmap(i,j-1,grid) && grid[i][j-1] == '1') { grid[i][j-1] = num; Map(grid,i,j-1,num); } if( Inmap(i-1,j,grid) && grid[i-1][j] == '1') { grid[i-1][j] = num; Map(grid,i-1,j,num); } display(grid); } } public: int numIslands(vector >& grid) { int num=1; for(int i=0;i > grid= {{'1','1','1','1','0'},{'1','1','0','1','0'},{'1','1','0','0','0'},{'0','0','0','0','0'}}; Solution s; int result =s.numIslands(grid); return 0; }
偷一个大佬的答案,可以学习一下方向控制,大体思路估计是一样的
class Solution {
void dfs(vector> &grid,int cur_i,int cur_j)
{
if(cur_i<0||cur_i==grid.size()||cur_j<0||cur_j==grid[0].size()||grid[cur_i][cur_j]=='0') return;
grid[cur_i][cur_j]='0';
int di[4]={0,0,1,-1};
int dj[4]={1,-1,0,0};
for(int index=0;index<4;index++)
{
dfs(grid,cur_i+di[index],cur_j+dj[index]);
}
return;
}
public:
int numIslands(vector>& grid) {
int ans=0;
for(int i=0;i