Leetcode总结之 Island专题

Table of Contents

总结

200. Number of Islands

305. Number of Islands II

695. Max Area of Island

130. Surrounded Regions

694. Number of Distinct Islands

711. Number of Distinct Islands II


总结

Island专题基本上是图的题目,方法主要是DFS, BFS和Union Find

主要要点就是:
1. 注意edge case ( 边界,grid为空)
2. 若grid可以被改变,每次访问后数值改为0,否则则设立一个visited矩阵

接下来的题目就可以依次解了


200. Number of Islands


305. Number of Islands II


695. Max Area of Island


130. Surrounded Regions


694. Number of Distinct Islands

计算所有grid里出现的island个数,但是所有形状一样的计算为同一个island。

这题的难点在于如何分析形状一样的island。这题由于不需要考虑旋转和对称,所以所谓形状一样就是完全一样(方向也要相同)

基于这一点就很好办了,只需要每次dfs的时候记录延伸的方向即可(如向上就是1,向下就是2,左3,右4 etc.)

需要注意的是,由于以下两种情况得到的方向string可能一样:

                                  

两个形状的到的方向string均为 442 (右右下), 所以在方向由上下改变为左右的时候 需要在string里加一个标识符在我的代码里加了z

因此两个形状的方向string分别为 44z2,442z

public class Solution {/*** @param grid: a list of lists of integers* @return: return an integer, denote the number of distinct islands*/int n = 0, m = 0;public int numberofDistinctIslands(int[][] grid) {if (grid == null || grid.length == 0) return 0;n = grid.length;m = grid[0].length;Set<String> set = new HashSet<>();for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (grid[i][j] == 1) {set.add(dfs(grid, i, j));}}}for (String s : set) {System.out.println(s);}return set.size();}public String dfs(int[][] grid, int x, int y) {// up : 1, down : 2, left : 3, right : 4grid[x][y] = 0;StringBuilder sb = new StringBuilder();if (x - 1 >= 0 && grid[x - 1][y] == 1) {sb.append("1");sb.append(dfs(grid, x - 1, y));}if (x + 1 < n && grid[x + 1][y] == 1) {sb.append("2");sb.append(dfs(grid, x + 1, y));}sb.append("z");if (y - 1 >= 0 && grid[x][y - 1] == 1) {sb.append("3");sb.append(dfs(grid, x, y - 1));}if (y + 1 < m && grid[x][y + 1] == 1) {sb.append("4");sb.append(dfs(grid, x, y + 1)); } return sb.toString();}
}

711. Number of Distinct Islands II

Leetcode总结(Island专题)相关推荐

  1. 花花酱leetcode 题目——搜索专题

    在刷完极客时间的算法题目之后,偶然看到了花花酱关于leetcode进入千题时代的一些刷题看法.决定跟着他的思路继续刷题. 要刷多少题 1 每个类型 10-20 如何刷题 1 同类型题目一起刷 2 看代 ...

  2. LeetCode (二分小专题)33搜索旋转排序数组34在排序数组中查找元素的第一个和最后一个位置35搜索插入位置

    前言 国庆前最后一次打卡,国庆后继续开启,公众号bigsai回复进群欢迎加入打卡,如有帮助记得点赞收藏. 近期打卡记录: LeetCode 32最长有效括号(困难) (本周) LeetCode 30串 ...

  3. LeetCode之Island Perimeter

    1.题目 You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 rep ...

  4. LeetCode 463. Island Perimeter

    题目: You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 repr ...

  5. Leetcode - 广度优先遍历专题

    > 基础 1. 广度遍历优先是从给定的root节点开始,逐层次的向下访问各个节点: 2. 实现的方式是通过队列的先进先出,将从root节点开始的左孩子和右孩子压入到队列中,并顺序取出: 3. 由 ...

  6. 每周leetcode - 02链表专题 237/83/234/138/92/142/Offer 22/148/23/24/147/86/61/328/2/Offer06

    文章目录 leetcode - 237. 删除链表中的节点 leetcode - 83. 删除排序链表中的重复元素 leetcode - 234. 回文链表 leetcode - 138. 复制带随机 ...

  7. LeetCode -前缀和专题

    文章目录 一.前缀和 二.刷题 一.前缀和 二.刷题 LeetCode 724. 寻找数组的中心下标 原题链接 class Solution {public:int pivotIndex(vector ...

  8. LeetCode Hot100 ---- 排序专题

    排序算法 快速排序 插入排序 归并排序 希尔排序 堆排序 快速排序 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为较小和较大的2个子序列,然后递归地排序两个 ...

  9. LeetCode Hot100 ---- 链表专题专题

    链表 力扣109:将有序链表转化为二叉搜素树 力扣141:环形链表判断是否有环 力扣142:环形链表检测入口位置 力扣143:重拍链表 力扣160:相交链表 力扣206:反转链表 力扣21:合并两个有 ...

最新文章

  1. R语言gganimate包创建可视化gif动图、并使用anim_save函数保存可视化gif动图(gganimate export to gif)
  2. js立即调用的函数表达式
  3. Docker Compose部署Nexus3时的docker-compose.yml代码
  4. jquery改变css,改变style
  5. 机器学习(八)——在线学习、K-Means算法、混合高斯模型和EM算法
  6. 解决异步问题,教你如何写出优雅的promise和async/await,告别callback回调地狱!
  7. java timezone id_java.util.TimeZone.setID()方法实例
  8. keras构建卷积神经网络_通过此简单教程学习在网络上构建卷积神经网络
  9. Flask+Axios+jQuery构建前后端通信的小例子
  10. 在线多空行只保留一个工具
  11. resnet18实现cifar10分类
  12. Linux宝库名人轶事栏目 | 智能化之边缘计算浅析
  13. 电影院售票系统,电影院订票系统,电影院购票管理系统计算机毕业设计
  14. BeanUtils与PropertyUtils区别
  15. Hough变换圆检测定位
  16. 防御DDoS措施抓住这一要点,让你从此不再为DDoS头疼
  17. 微软联合创始人,花花公子保罗·艾伦的传奇一生
  18. 随机抽样的python实现
  19. realme有升级到android10的,RealmeX/Q将升级安卓10底层刷机包
  20. web开发中常用的几种统计图使用

热门文章

  1. vim实用技巧(第二版)........持续更新ing
  2. ChatGPT生成Excel统计公式
  3. 利用CSS3实现天气图标
  4. [Paper Reading] Alibaba Hologres: A Cloud-Native Service for Hybrid Serving/Analytical Processing
  5. mongo启动报错:about to fork child process, waiting until server is ready for connections.forked process
  6. 金融学习之九——票息剥离法求零息利率
  7. 有哪些兼职能日入30元?
  8. Kafka The Definitive Guide
  9. origin作图如何修改白色画布的大小
  10. Win10+vm15.5.6虚拟机+unlocker3.0.3+“Intel VT-x处于禁用状态”解决方案+安装Sketch软件+汉化(mac系统)