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

leetcode54. 螺旋矩阵(java)

螺旋矩阵

  • 题目描述
    • 解题 收缩法
  • 上期经典算法

题目描述

难度 - 中等
原题链接 - leecode 54 螺旋矩阵

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例1:
在这里插入图片描述输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

示例2:
在这里插入图片描述输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100

解题 收缩法

解题的核心思路是按照右、下、左、上的顺序遍历数组,并使用四个变量圈定未遍历元素的边界:
在这里插入图片描述随着螺旋遍历,相应的边界会收缩,直到螺旋遍历完整个数组:
在这里插入图片描述把上面过程翻译成代码:

class Solution {List<Integer> spiralOrder(int[][] matrix) {int upper_bound = 0;int lower_bound = matrix.length - 1;int left_bound = 0;int right_bound = matrix[0].length - 1;List<Integer>ans = new LinkedList<>();while(ans.size() < matrix.length * matrix[0].length){//从左往右if(upper_bound <= lower_bound){for(int i = left_bound;i <= right_bound;i++){ans.add(matrix[upper_bound][i]);}//上边界下移upper_bound++;}//从上到下if(left_bound <= right_bound){for(int i = upper_bound;i <= lower_bound;i++){ans.add(matrix[i][right_bound]);}//右边界左移right_bound--;}//从右向左if(upper_bound <= lower_bound){for(int i = right_bound;i >= left_bound;i--){ans.add(matrix[lower_bound][i]);}lower_bound--;}//从下向上if(left_bound <= right_bound){for(int i = lower_bound;i >= upper_bound;i--){ans.add(matrix[i][left_bound]);}left_bound++;}}return ans;}}

上期经典算法

leetcode48. 旋转图像

http://www.lryc.cn/news/136367.html

相关文章:

  • go gorm 查询
  • Flutter GetXController 动态Tabbar 报错问题
  • Redis(缓存预热,缓存雪崩,缓存击穿,缓存穿透)
  • UE4/5Niagara粒子特效学习(使用UE5.1,适合新手)
  • from moduleA import * 语句 和import moduleA 的区别
  • 【leetcode 力扣刷题】交换链表中的节点
  • 学会Mybatis框架:让你的代码更具灵活性、可维护性、安全性和高效性【二.动态SQL】
  • Oracle 中 ROWNUM 使用问题记录
  • MySQL数据库:内置函数
  • 【C++杂货铺】探索string的底层实现
  • c++ day1
  • 变动的Python爬虫实现
  • mybatis-plus--配置-(sql)日志输出-自动填充-分页-多数据源-逻辑删除
  • 数据API服务管理功能:解放数据潜力,提升业务效率
  • 云南森林火灾vr消防模拟安全演练系统训练消防员火灾和事故的适应和应对能力
  • (6)(6.2) 任务命令
  • 【consul】
  • Electron环境搭建
  • MinIO线上扩容实战
  • 【微服务】微服务的概论
  • 基于Jenkins自动打包并部署docker环境
  • jvm 运行时数据区
  • Jobs Portal求职招聘系统源码v3.5版本
  • Android kotlin系列讲解(入门篇)使用Intent在Activity之间穿梭
  • 音频编码类型及对应的封装文件
  • 初探科研 | 第一次科研经历
  • Wireshark数据抓包分析之HTTP协议
  • 研发管理工具大揭秘!6款利器助你高效研发
  • 云知识入门-什么是虚拟机、磁盘、镜像和快照
  • C/C++编译整理