【力扣】螺旋矩阵

embedded/2024/10/18 18:23:45/

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/embedded/25353.html

相关文章

VUE+TS使用elementUI的el-checkbox双重v-for循环做勾选

html部分 <template><div class"hello"><el-form :model"elForm"> <!-- cities对象数组形式 --><el-form-item v-for"(item, topIndex) in cities" :key"topIndex"> <!--item.checked 是每一个item…

什么是域名解析?域名解析的完整流程是什么?如何清理DNS缓存?(附源码)

目录 1、什么是域名&#xff1f; 2、为什么使用域名&#xff1f; 3、域名解析的完整流程 4、调用gethostbyname系统接口将域名解析成IP地址 5、为什么需要清理系统DNS缓存&#xff1f; 6、使用cmd命令清理DNS缓存 7、通过代码去清除系统DNS缓存 C软件异常排查从入门到精…

Ubuntu20.04安装redis5.0.7

redis下载命令&#xff1a; wget https://download.redis.io/releases/redis-5.0.7.tar.gz 解压到 opt目录下 tar -zxvf redis-5.0.7.tar.gz -C /opt apt install -y gcc # 安装gccapt install make # 安装make 后面执行make一直报错 make报错后清除&#xff1a; make …

远程桌面的端口配置与优化

在现代企业环境中&#xff0c;远程桌面连接已成为日常工作中不可或缺的一部分。然而&#xff0c;随着网络攻击的增加&#xff0c;确保远程桌面连接的安全性变得尤为重要。其中一个关键的安全因素是端口配置。 一、远程桌面默认端口 远程桌面协议&#xff08;RDP&#xff09;默…

C语言:内存操作函数memcpy、memmove、memset和memcpy的使用和模拟实现

一&#xff1a;memcpy的使用和模拟 memcpy使用时需要包含的头文件为#include<string.h> void* memcpy(void* destination,const void* source,size_t num) 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置&#xff08;特别注意的是…

Open sesame! universal black box jailbreaking of large language models - 论文翻译

论文链接&#xff1a; https://arxiv.org/pdf/2309.01446.pdf Open sesame! universal black box jailbreaking of large language models Abstract1 Introduction2 Previous Work3 Threat Model4 Our Method4.1 Genetic Algorithm4.2 Population Encoding4.3 Fitness4.4 Sele…

88张表-Mysql

快递表-DDL CREATE TABLE li-express (expressId int(11) NOT NULL AUTO_INCREMENT COMMENT 自增ID,expressName varchar(50) NOT NULL COMMENT 快递名称,dataFlag tinyint(4) NOT NULL DEFAULT 1 COMMENT 删除标志&#xff08;1&#xff1a;有效 -1&#xff1a;删除&#xf…

第十五届蓝桥杯省赛第二场C/C++B组H题【质数变革】题解

解题思路 首先&#xff0c;我们考虑一下整个数组都是由质数构成的情况。 当我们要将质数 x x x 向后移 k k k 个时&#xff0c;如果我们可以知道质数 x x x 在质数数组的下标 j j j&#xff0c;那么就可以通过 p r i m e s [ j k ] primes[j k] primes[jk] 来获取向后…