【力扣】螺旋矩阵

devtools/2024/10/18 12:33:16/

59. 螺旋矩阵 II

刚开始遇到这道题目的时候相信没见过的同学多多少少都会有点懵圈,感觉题目有点无从下手,但其实只要抓住本质就行了,题目的最终目的就是返回一个二维数组的结果,这个二维数组的大小是的 int[n][n],题目给出了 n = 3 时的输出结果:

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

那其实我们要做的就是将矩阵中的每一个单元格的内容填充进这个二维数组中,至于填充的过程是怎样的,就需要我们去找出规律,然后用代码去模拟这个旋转过程了,可见这是一道过程模拟的编程题。

以 n == 4,有规律如下:

不难发现,n = 4 的情况下,旋转了两圈。n = 3 的情况下,旋转了一圈,外加一个中心坐标。于是模拟顺时针矩阵的过程可以这样:

  • 填充上行从左到右
  • 填充右列从上到下
  • 填充下行从右到左
  • 填充左列从下到上

由外向内一圈一圈这么画下去。

这里一圈下来,我们要画每四条边,这四条边怎么画,每画一条边都要坚持一致的左闭右开,或者左开右闭的原则,这样这一圈才能按照统一的规则画下来。

那么我按照左闭右开的原则,来画一圈,大家看一下:

Java 代码如下:

class Solution {public int[][] generateMatrix(int n) {int[][] result = new int[n][n];int loop = n / 2;       // 螺旋圈数int mid = n / 2;        // 中心坐标,eg:n==3的中心坐标是[1,1]int num = 1;            // 螺旋排序从1开始int startx = 0;         // 起点x坐标int starty = 0;         // 起点y坐标int offset = 1;         // 偏移量int i, j;               // 作为每次循环的起始坐标while(loop-- > 0) {// 模拟填充上行过程(左闭右开)for(j = starty; j < n - offset; j++) {result[startx][j] = num++;}// 模拟填充右列过程(上闭下开)for(i = startx; i < n - offset; i++) {result[i][j] = num++;}// 模拟填充下行过程(右闭左开)for(; j > starty; j--) {result[i][j] = num++;}// 模拟填充左列过程(下闭上开)for(; i > startx; i--) {result[i][j] = num++;}// 更新坐标startx++;starty++;// 更新偏移量offset += 1;}// 如果是奇数,中心坐标需要单独处理if(n % 2 == 1) {result[mid][mid] = num++;}return result;}
}


http://www.ppmy.cn/devtools/14594.html

相关文章

卡尔曼滤波器(二):Simulink卡尔曼滤波器模块使用

观看MATLAB技术讲座笔记&#xff0c;该技术讲座视频来自bilibili账号&#xff1a;MATLAB中国。 本节在Simulink中用卡尔曼滤波器来滤除传感器噪声&#xff0c;准确估算单摆摆角。 一、单摆模型简介 不考虑摩擦时&#xff0c;下图所示的单摆力学平衡方程为&#xff1a; m l 2…

pycharm安装第三方库

一、使用pip的方式安装

直接扩频通信系统的Matlab实现

伪随机码产生 在直接序列扩频&#xff08;DSSS&#xff09;通信系统中&#xff0c;伪随机码&#xff08;PRN&#xff0c;pseudo-random noise&#xff09;作为一个关键组成部分&#xff0c;用于扩展数据信号的带宽。这些伪随机码通常由伪随机二进制序列&#xff08;PN序列&…

java-异常

一、异常的概念及分类 Exception&#xff1a;异常&#xff0c;代表程序可能出现的问题 Exception分为两类&#xff1a; 1、运行时异常&#xff1a;RuntimeException以及其子类&#xff0c;编译阶段不会出现异常提醒&#xff0c;在运行阶段会出现异常提醒 2、编译时异常&…

Mybatis入门(入门案例,IDEA配置SQL提示,JDBC介绍,lombok介绍)

目录 一、Mybatis入门案例介绍整体步骤创建SpringBoot项目pom依赖准备测试数据新建实体类配置Mybatis数据库连接信息新建接口类,编写SQL代码单元测试 二、IDEA配置SQL提示三、JDBC是什么案例JDBC和Mybatis对比 四、数据库连接池介绍如何实现一个数据库连接池切换数据库连接池 五…

MAC 安装miniconda

Conda Conda是一个开源跨平台语言无关的包管理与环境管理系统。由“连续统分析”基于BSD许可证发布。 Conda允许用户方便地安装不同版本的二进制软件包与该计算平台需要的所有库。还允许用户在不同版本的包之间切换、从一个软件仓库下载包并安装。 Conda是用Python语言开发&am…

Java23种设计模式-结构型模式之适配器模式

适配器模式&#xff08;Adapter Pattern&#xff09;&#xff1a;核心思想是将现有的接口转换为客户端所期望的接口。它允许通过将一个接口转换为另一个接口&#xff0c;将不兼容的类或对象组合在一起。12 主要角色包括&#xff1a; 目标(Target)接口&#xff1a;当前系统业务…

linux redis 开机自启

安装位置/data/redis访问端口6379配置文件地址/data/redis/bin/ make PREFIX/data/redis install cp redis.conf /data/redis/bin/ cd /data/redis/bin/ ./redis-server /data/redis/bin/redis.conf 配置redis跟随系统启动自动启动 将redis_init_script脚本拷贝到linux的/etc…