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

LeetCode 54 螺旋矩阵

先贴代码

​
class Solution {public int[][] generateMatrix(int n) {int left = 0;int right = n-1;int up = 0;int down = n-1;int[][] result = new int[n][n];int number = 0;while(left <= right && up <= down) {for(int i=left;i<=right;i++) {number++;result[up][i] = number;}up++;for(int i=up;i<=down;i++) {number++;result[i][right] = number;}right--;for(int i=right;i>=left;i--) {number++;result[down][i] = number;}down--;for(int i=down;i>=up;i--) {number++;result[i][left] = number;}left++;}return result;}
}​

我其实不止一次做过这道题,巧的是前面几次做完就忘记了..其实编程题真的应该自己去做,而不是看答案,那样太容易遗忘。并且一个很好用的方法是画示意图,把一些变量的变化过程给标记出来。

螺旋矩阵重在矩阵的切割,你是如何给矩阵分块以及上下左右的索引的增减。

1、矩阵分块

以三阶矩阵为例,

123
894
765

我们可以以1、2为块,然后以3、4为块,5、6为块,7,8为块,9为块

我使用的是以1、2、3为块,4,5为块,6、7为块,8为块,9为块

每次块结束后需要对索引值进行增减(以1、2为块似乎不用每次进行上下左右索引的增减,只需要在每次一圈结束后增加一个索引即可)

2、索引增减

首先设置left=0;right=n-1;up=0;down=n-1;

第一阶段从左到右,结束后对上索引加一(从左到右是i++)

第二阶段从上到下,结束后对右索引减一(从上到下是i++)

第三阶段从右到左,结束后对下索引减一(从右到左是i--)

第四阶段从下到上,结束后对左索引加一(从下到上是i--)

其实一个非常巧合的规律是,上一个阶段的索引加减刚好是下一个阶段的开始方向

最后我们可以定义退出循环的条件是

1、left <= right && up <= down

2、number <= n * n

1或者2都是可行的

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

相关文章:

  • OpenCV 概念、整体架构、各模块主要功能
  • 组合数与莫队——组合数前缀和
  • stm32之雨滴传感器使用记录
  • 华硕平板k013me176cx线刷方法
  • C#停车场管理系统
  • C++:stl:stack、queue、priority_queue介绍及模拟实现和容量适配器deque介绍
  • ​【Java】面向对象程序设计 课程笔记 面向对象基础
  • Hive【Hive(五)函数-高级聚合函数、炸裂函数】
  • zabbix(二)
  • 容器安全检测工具KubeHound使用
  • 机器学习笔记 - 基于强化学习的贪吃蛇玩游戏
  • C++_pen_类
  • MySQL 多表关联查询优化实践和原理解析
  • LeNet网络复现
  • Oracle 慢查询排查步骤
  • 互联网Java工程师面试题·MyBatis 篇·第二弹
  • Linux 下如何调试代码
  • 腾讯云服务器简介和使用流程
  • python 二分查找
  • 通过async方式在浏览器中调用web worker
  • FPGA project : TFT_LCD
  • 2023年-华为机试题库B卷(Python)【满分】
  • 创建GCP service账号并管理权限
  • 想要精通算法和SQL的成长之路 - 验证二叉树
  • ERROR 6400 --- [ main] com.zaxxer.hikari.pool.HikariPool : root - Exception
  • CART算法解密:从原理到Python实现
  • C++项目:【高并发内存池】
  • [论文笔记]BitFit
  • 浅谈yolov5中的anchor
  • RabbitMQ-工作队列