当前位置: 首页 > news >正文

图刷图总结

130. 被围绕的区域

问题分析:一个矩阵中,如果被包围的区域,原地修改为X

解题思路:先标记边缘的元素为特殊值,然后再全局遍历矩阵,将0-->X,将特殊值-->0

自己第二次做解题出来了,几个堵点注意:

  • 遍历标记的时候,注意遍历第一整列和最后一整列,第一行和最后一行要去掉头尾元素
  • 做DFS的时候,对于矩阵的遍历,一定要记录访问过的元素
class Solution {public void solve(char[][] board) {int m = board.length;int n = board[0].length;List<int[]> pos = new ArrayList<>();for (int i = 0; i < m; i++) {if (board[i][0] == 'O') {pos.add(new int[] { i, 0 });}if (board[i][n - 1] == 'O') {pos.add(new int[] { i, n - 1 });}}for (int i = 1; i < n - 1; i++) {if (board[0][i] == 'O') {pos.add(new int[] { 0, i });}if (board[m - 1][i] == 'O') {pos.add(new int[] { m - 1, i });}}for (int[] a : pos) {tag(board, a[0], a[1]);}for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (board[i][j] == 'O') {board[i][j] = 'X';continue;}if (board[i][j] == '2') {board[i][j] = 'O';continue;}}}}private Set<String> visited = new HashSet<String>();private void tag(char[][] board, int i, int j) {if (i < 0 || i >= board.length || j < 0 || j >= board[0].length || board[i][j] == 'X') {return;}if (visited.contains(i + "-" + j)) {return;}board[i][j] = '2';visited.add(i + "-" + j);tag(board, i - 1, j);tag(board, i, j + 1);tag(board, i + 1, j);tag(board, i, j - 1);}
}

200. 岛屿数量

刷题步骤,先是5分钟理解题目,确定做题思路,使用什么算法,然后就是编码,编码先使用算法的基本模板,然后根据情况调整

这个题目,使用DFS的方式,结合isVisited来标识是否使用过。

class Solution {public int numIslands(char[][] grid) {// 题目理解清楚// 采取DFS/BFS的方式// 结果是岛屿的数量, int count// 找到所有1的位置// 依次访问visitdint m = grid.length;int n = grid[0].length;boolean[][] isVisited = new boolean[m][n];int res = 0;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] == '1' && !isVisited[i][j]) {dfs(grid, isVisited, i, j);res++;}}}return res;}public void dfs(char[][] grid, boolean[][] isVisited, int i, int j) {// 终止条件if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || isVisited[i][j] || grid[i][j] == '0') {return;}isVisited[i][j] = true;dfs(grid, isVisited, i + 1, j);dfs(grid, isVisited, i - 1, j);dfs(grid, isVisited, i, j + 1);dfs(grid, isVisited, i, j - 1);}
}
http://www.rkmt.cn/news/143668.html

相关文章:

  • Harmony学习之ArkTS语言基础
  • 超级无敌好看爱创猫短剧APP
  • 12-23午夜盘思
  • 微服务的同步异步
  • 2025智能体(Agent)框架全景:构建自主智能的基石
  • Harmony之路:分布式软总线与设备发现——构建跨设备协同的“神经网络“
  • Harmony之路:性能优化(下)——内存管理与启动优化
  • AGV物流+机器视觉:解锁包装车间自动化升级的核心密码
  • Harmony之路:页面的舞台——Ability与页面路由的奥秘
  • 基于java的SpringBoot/SSM+Vue+uniapp的高校智能考试系统的详细设计和实现(源码+lw+部署文档+讲解等)
  • C++与浏览器交织-从Chrome插件到WebAssembly,开启性能之门
  • Harmony之路:让界面活起来——@State状态管理初体验
  • Harmony之路:全局状态管家——AppStorage与应用级数据管理
  • Python包导入终极指南:子文件如何成功调用父目录模块
  • 会计档案电子化管理系统的智能检索、权限管控与数据集成功能详解
  • 盘点5款良心神器:真正实现AI写论文免费,学生党必看!
  • α-Bungarotoxin, AF647,α-博格毒素-AF647标记物,荧光信号检测方法
  • 稀土阻燃剂:提升电线电缆安全性
  • 8 个降AI率工具,研究生高效降重指南
  • 打造贷前风控“防火墙”:基于天远数据借贷风险API的用户画像构建实战
  • 模块化智能革命:Deepoc开发板如何成为智慧厨房的“万能AI引擎”
  • 基于SpringBoot+Vue.js+MySQL的毕设题目管理系统
  • Java小白求职者的面试之旅:互联网大厂中的技术问答
  • java计算机毕业设计无纸化会议管理系统 智慧会议协同办公平台 数字化会务全流程管理系统
  • 在线教育系统源码开发技术解析:课程、直播、考试与多端适配方案
  • Java并发编程利器:Atomic原子类全解析,轻松搞定多线程安全!
  • HT0104 4路双向电平转换器全面解析
  • 挖到高薪密码!网安 480 万人才缺口,零基础入门到精通,15K + 岗轻松 get!
  • 于静谧中滋养身心,让疗养成为生命的重启键
  • MyListing – 目录与列表 WordPress 主题