1. 程式人生 > 其它 >leetcode 694 不同的島嶼數量

leetcode 694 不同的島嶼數量

 

不同的島嶼數量

 

 其中有四個島嶼,但是左下角和右上角的島嶼形狀相同,所以不同的島嶼共有三個,演算法返回 3。

考點:

1. DFS

2. 序列化

3. 去重操作

public class Solution {
    /**
     * @param grid: a list of lists of integers
     * @return: return an integer, denote the number of distinct islands
     */
    public int numberofDistinctIslands(int[][] grid) {
        
// write your code here int m = grid.length; int n = grid[0].length; HashSet<String> islands = new HashSet<>(); for(int i = 0; i< m; i++){ for(int j = 0; j<n;j++){ if(grid[i][j] == 1){ StringBuilder sb = new
StringBuilder(); dfs(grid, i, j, sb, 0); islands.add(sb.toString()); } } } return islands.size(); } private void dfs(int[][] grid , int i , int j , StringBuilder sb, int dir){ int m = grid.length;
int n = grid[0].length; if (i < 0 || j < 0 || i >= m||j>= n || grid[i][j] == 0){ return; } grid[i][j] = 0; sb.append(dir).append(','); dfs(grid,i-1,j,sb,1);// dfs(grid,i+1,j,sb,2);// dfs(grid,i,j-1,sb,3);// dfs(grid, i, j+1, sb, 4);// sb.append(-dir).append(','); } }