关键是:把island转换成唯一标识的字串。
class Solution {
void dfs(vector<vector<int>>& grid,int i,int j,int m, int n, char flag, string& str){
if(i<0 || i>=m || j<0 || j>=n || grid[i][j] == 0)
return ;
str += flag;
grid[i][j] = 0;
dfs(grid,i-1,j,m,n,'d',str);
dfs(grid,i+1,j,m,n,'u',str);
dfs(grid,i,j+1,m,n,'r',str);
dfs(grid,i,j-1,m,n,'l',str);
str += 'b';
}
public:
int numDistinctIslands(vector<vector<int>>& grid) {
int m = grid.size();
if(m==0) return 0;
int n = grid[0].size();
map<string,int> mp;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(grid[i][j] == 1) {
string str="";
dfs(grid,i,j,m,n,'O',str);
if(mp.find(str) == mp.end())
mp[str]=1;
}
}
}
return mp.size();
}
};