59数组-螺旋矩阵
Posted 孤注一掷 、
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了59数组-螺旋矩阵相关的知识,希望对你有一定的参考价值。
题目
思路
模拟顺时针画矩阵的过程,先填充上行从左到右,右列从上到下,下行从右到左,左列从下到上,由外圈到内圈一直画下去。
每一条边都要坚持一个原则:左闭右开
如图
每一种颜色,代表一条边,遍历的长度。每条边遵循一样的原则。
代码:
class Solution
public:
vector<vector<int>> generateMatrix(int n)
//使用vector定义一个二维数组
vector<vector<int>> res(n, vector<int>(n, 0));
//定义每一圈的起始位置
int startX = 0;
int startY = 0;
//每个圈循环几次
int loop = n/2;
//矩阵中间位置
int mid = n/2;
//给矩阵赋的值
int count = 1;
//控制边的遍历长度,每次循环收缩一
int offset = 1;
int i,j;
while(loop--)
i = startX;
j = startY;
//下面开始四个for就是模拟转了一圈
//模拟上行从左到右(左闭右开)
for(j = startY; j < n - offset; j++)
res[startX][j] = count++;
//模拟填充右列从上到下(左闭右开)
for(i = startX; i <n - offset; i++)
res[i][j] = count++;
//模拟填充下行从右到左(左闭右开)
for(; j > startY ; j--)
res[i][j] = count++;
//模拟填充左列从下到上(左闭右开)
for(; i > startX ; i--)
res[i][j] = count++;
//下一圈开始的时候,起始位置要各自加一
startX++;
startY++;
//offset 控制每一圈里每一条边的遍历长度
offset++;
//如果n为奇数,需要单独给矩阵最中间的位置赋值
if(n % 2)
res[mid][mid] = count;
return res;
;
以上是关于59数组-螺旋矩阵的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode 59. 螺旋矩阵 II(Spiral Matrix II)
代码随想录算法训练营第二天 | 977.有序数组的平方209.长度最小的子数组59.螺旋矩阵II