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

Leetcode热题100中的:矩阵专题

矩阵框架

1.坐标变换型

  • 旋转,翻转,变换

2.按圈遍历型

  • 螺旋,顺时针,按层遍历

3.原地标记型

  • 整行整列修改,传播,标记

4.单调矩阵搜索型

  • 行递增,列递增,搜索

5.矩阵DP / 面积型

73.矩阵置零(原地标记型)

关键信息一句话总结:

将第一行和第一列作为标志数组,标记置零,最后自己也变成0

  • 方法1:利用标记数组
classSolution{publicvoidsetZeroes(int[][]matrix){// 双数组标记法intn=matrix.length;intm=matrix[0].length;boolean[]row=newboolean[n];boolean[]col=newboolean[m];for(inti=0;i<n;i++){for(intj=0;j<m;j++){if(matrix[i][j]==0){row[i]=true;col[j]=true;}}}for(inti=0;i<n;i++){for(intj=0;j<m;j++){// 只要第j列或者第i行需要清零 该位置才是0if(row[i]||col[j]){matrix[i][j]=0;}}}}}
  • 方法2:优化第一行和第一列作为标志数组
classSolution{publicvoidsetZeroes(int[][]matrix){// 优化思路:将标志数组放进第一行和第一列intn=matrix.length;intm=matrix[0].length;booleanfirstRow=false;booleanfirstCol=false;// 1.先检测第一行是否有0 我们后面再处理for(intj=0;j<m;j++){if(matrix[0][j]==0){firstRow=true;break;}}// 2.再检测第一列是否有0 我们后面再处理for(inti=0;i<n;i++){if(matrix[i][0]==0){firstCol=true;break;}}// 3.开始标记for(inti=1;i<n;i++){for(intj=1;j<m;j++){if(matrix[i][j]==0){matrix[0][j]=0;matrix[i][0]=0;}}}// 4.开始填0for(inti=1;i<n;i++){for(intj=1;j<m;j++){if(matrix[0][j]==0||matrix[i][0]==0){matrix[i][j]=0;}}}// 5.第一行和第一列清零if(firstRow){for(intj=0;j<m;j++){matrix[0][j]=0;}}if(firstCol){for(inti=0;i<n;i++){matrix[i][0]=0;}}}}
  • 反思:我没有想到矩阵的第一列和第一行能够作为标志数组进行优化

54.螺旋矩阵(按圈遍历型)

关键信息一句话总结:

利用四边界,将边界进行收缩

  • 方法1:利用%进行方向判断,用isVisited标志数组判断访问
classSolution{publicList<Integer>spiralOrder(int[][]matrix){List<Integer>result=newArrayList<>();intn=matrix.length;intm=matrix[0].length;boolean[][]isVisited=newboolean[n][m];// dx: 右0 下+1 左0 上-1int[]dx=newint[]{0,1,0,-1};// dy: 右+1 下0 左-1 上0int[]dy=newint[]{1,0,-1,0};intx=0;inty=0;// 当前方向 0表示右intdir=0;for(inti=0;i<n*m;i++){result.add(matrix[x][y]);isVisited[x][y]=true;intnx=x+dx[dir];intny=y+dy[dir];if(nx<0||nx>=n||ny<0||ny>=m||isVisited[nx][ny]){// 转换方向dir=(dir+1)%4;}// 移动坐标x+=dx[dir];y+=dy[dir];}returnresult;}}
  • 方法2:优化思路:利用边界收缩来替换方向判断
classSolution{publicList<Integer>spiralOrder(int[][]matrix){// 四边界法: 优化思路:判断下一个元素是否访问过用 + 方向如何判断// 用四个边界来进行按要求访问 通过收缩边界来进行访问元素List<Integer>result=newArrayList<>();inttop=0;intbottom=matrix.length-1;intleft=0;intright=matrix[0].length-1;while(top<=bottom&&left<=right){// ->rightfor(intj=left;j<=right;j++){result.add(matrix[top][j]);}top++;// ->downfor(inti=top;i<=bottom;i++){result.add(matrix[i][right]);}right--;// ->leftif(top<=bottom){for(intj=right;j>=left;j--){result.add(matrix[bottom][j]);}bottom--;}// ->upif(left<=right){for(inti=bottom;i>=top;i--){result.add(matrix[i][left]);}left++;}}returnresult;}}
  • 反思:我没有想到四边界收缩法,可以利用边界收缩来对应优化方向判断和访问记录

48.旋转图像(坐标变换型)

关键信息一句话总结:

转置 + 每一行逆序 模拟 顺时针90°旋转

classSolution{publicvoidrotate(int[][]matrix){intn=matrix.length;// (i , j) → (j , n-1-i)// 1.对角线转置for(inti=0;i<n;i++){for(intj=i+1;j<n;j++){inttemp=matrix[i][j];matrix[i][j]=matrix[j][i];matrix[j][i]=temp;}}// 2.每一行倒置for(inti=0;i<n;i++){// 3.双指针倒置intleft=0;intright=n-1;while(left<right){inttemp=matrix[i][left];matrix[i][left]=matrix[i][right];matrix[i][right]=temp;left++;right--;}}}}
  • 反思:我没有观察出来坐标的变化

240.搜索二维矩阵II(单调矩阵搜索型)

关键信息一句话总结:

右上角开始搜索,右上角的特征是左小下大,收缩搜索范围

classSolution{publicbooleansearchMatrix(int[][]matrix,inttarget){// 从右上角开始 因为左边都小 下边都大intn=matrix.length;intm=matrix[0].length;intx=0;inty=m-1;while(x<n&&y>=0){if(target==matrix[x][y]){returntrue;}if(matrix[x][y]>target){y--;}else{x++;}}returnfalse;}}
  • 反思:我没有观察出来右上角的特征
http://www.jsqmd.com/news/473229/

相关文章:

  • iOS设备解锁工具终极方案:5分钟破解激活锁的专业指南
  • 实时口罩检测-通用模型体验:无需代码,上传图片秒出检测结果
  • PHP 8.9命名空间增强实战手册(开发者必须掌握的3个颠覆性语法)
  • Janus-Pro-7B实操手册:CFG权重调节技巧与文生图质量优化策略
  • DAMO-YOLO手机检测入门必看:damoyolo.py网络结构解读与训练复现提示
  • 5分钟上手LFM2.5-1.2B-Thinking:Ollama实战教程,轻松定制AI角色和风格
  • 新手入门网络编程:用快马生成Fetch API数据获取实战示例
  • 5步打造小说视频:TaleStreamAI颠覆式创作革命
  • PP-DocLayoutV3部署案例:边缘设备(Jetson Orin)上实时文档分析部署
  • 权限认证框架实战:JWT、Shiro与Sa-Token的深度对比与应用场景解析
  • Qwen3-Reranker-0.6B在法律文本处理中的应用
  • 新手零基础入门:借助快马平台编写你的第一条openclaw启动指令
  • DCT-Net与移动端集成:实现手机端卡通化应用
  • 利用快马平台快速构建c语言学生成绩管理系统原型
  • 如何从零开始专利数据分析?Google Patents数据集应用指南
  • OneNote到Markdown的格式迁移完全指南:如何解决复杂笔记转换难题
  • 零基础玩转Meta-Llama-3-8B-Instruct:手把手教你用vLLM+WebUI快速部署
  • Vue + SSE:打造实时交互的AI问答前端架构
  • CLIP-GmP-ViT-L-14图文匹配测试工具惊艳案例:跨模态创意艺术生成
  • 漫画爱好者的离线阅读解决方案:3步打造个人漫画图书馆
  • 7个外显子测序的克隆进化快速搞定4分文章
  • Ostrakon-VL-8B保姆级教程:Chainlit中添加多模态输入组件(图片+语音转文本)
  • VTK实战指南:利用vtkImageReslice实现医学图像多平面重建(MPR)
  • OpenCode问题解决:如何设置自动休眠避免忘记关机浪费钱
  • 设计模式笔记:策略模式 (Strategy Pattern)
  • Cartographer纯定位模式下的地图覆盖问题:从现象剖析到工程化解决方案
  • AnimateDiff提示词工程:动作强度、镜头运动、时间节奏三维度优化
  • 技术解析:基于拉普拉斯金字塔网络的微分同胚大变形图像配准
  • 成都短视频公司推荐哪家|2026年专业代运营服务商测评榜单揭晓 - 企业推荐师
  • Halcon实战:从CAD到视觉模板的自动化生成与应用