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

Leetcode面试经典150题-54.螺旋矩阵

  解法都在代码里,不懂就留言或者私信

这个题可能和算法关联不大,coding技巧为上

class Solution {public List<Integer> spiralOrder(int[][] matrix) {/**先定义结果集 */List<Integer> ans = new ArrayList<>();/**当前位置从(0,0)开始 */int curRow = 0;int curCol = 0;Set<Integer> existsSet = new HashSet<>();/**direction表示当前运动的方向,理论上应该先往右,左边走不动了往下,下面走不动了往左 左边走不动了网上,这里我们定义0,1,2,3分别代表右下左上四个方向*/int direction = 0;/**count表示矩阵中共有多少个数字 */int count = matrix.length * matrix[0].length; ans.add(matrix[0][0]);existsSet.add(0);/**已经加了一个点 */int curCount = 1;/**还没有收集够所有的就继续 */while(curCount < count) {/**根据方向确定下一个点走哪里*/int rowNext = curRow;int colNext = curCol;/**根据方向不同确定行列的变化 */switch(direction) {case 0: colNext ++;break;case 1: rowNext ++;break;case 2:colNext --;break;case 3:rowNext --;break;}if(!existsSet.contains(rowNext*matrix[0].length + colNext) && rowNext >= 0 && colNext >= 0 && rowNext < matrix.length && colNext < matrix[0].length) {curRow = rowNext;curCol = colNext;/**把当前位置加进去 */ans.add(matrix[curRow][curCol]);existsSet.add(curRow*matrix[0].length + curCol);curCount ++;} else {/**如果这个位置已经存在了或者越界了,变向 */direction = (direction + 1)%4;}}return ans;}   
}


http://www.mrgr.cn/news/19145.html

相关文章:

  • 力扣面试150 旋转链表 闭链成环
  • ChatTCP:一款离线TCP数据包分析macOS APP,致力于让分析TCP数据包像看聊天记录一样简单
  • 如何在 Linux Terminal 中使用 Cmd+C复制,Cmd+V粘帖?
  • Docker入门学习-01
  • vue3页面空白-普通函数和箭头函数提升的不同
  • Windows使用ffmpeg获取麦克风数据
  • 激光雷达产品介绍
  • MySQL备份:备份策略、物理备份、mysqldump备份、增量备份、差异备份
  • DeFi是否还存在Alpha机会?Pencils Protocol 带领市场“向前看”
  • 深入理解 Prometheus 数据模型与指标监控
  • MATLAB eig 函数简介:计算特征值和特征向量
  • VS2022使用指定的LLVM版本
  • Linux C++ 开发7 - GDB常用命令汇总(你想了解的都在这)
  • 【算法专场】模拟(上)
  • C++复习day02
  • 专业文件搜索工具 | UltraSearch Pro v4.4.1.1015 绿色特别版
  • 字典树Trie(专项复习)
  • 【C++ Primer Plus习题】10.2
  • 我克隆了我自己,数字生命有什么意义?
  • 数据结构:顺序表的应用--仓库货物管理信息管理系统