leetcode 59.螺旋矩阵Ⅱ
大家好,我是小学五年级在读的蒟蒻,专注于后端,一起见证蒟蒻的成长,您的评论与赞与关注是我的最大动力,如有错误还请不吝赐教,万分感谢。一起支持原创吧!纯手打有笔误还望谅解。
题目描述
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
输入 n=3
输出 [[1,2,3],[8,9,4],[7,6,5]]
题解
主要是找出每次转向的条件,然后不停的转向(以整圈为单位)
/*
* @lc app=leetcode.cn id=59 lang=cpp
*
* [59] 螺旋矩阵 II
*/
// @lc code=start
class Solution
{
public:
vector<vector<int>> generateMatrix(int n)
{
vector<vector<int>> res(n, vector<int>(n, 0)); //定义存放数据的数组
int startx = 0, starty = 0; //定义x和y轴
int loop = n / 2; //计算创建出的矩阵需要循环的次数
int mid = n / 2; //计算出中间元素的元素下标
int count = 1; //计数赋值
int offset = 1; //控制每层的边遍历场长度
int i, j;
while (loop--)
{
//上面行的数据填充
for (j = starty; j < starty + n - offset; j++)
{
res[startx][j] = count++;
/* code */
}
//右边数据的填充
for (i = startx; i < startx + n - offset; i++)
{
res[i][j] = count++;
}
//下面数据的填充
for (; j > starty; j--)
{
res[i][j] = count++;
/* code */
}
//左边数据的填充
for (; i > startx; i--)
{
res[i][j] = count++;
/* code */
}
//每填充一圈则将下标往里面缩一圈
starty++;
startx++;
//控制每条边的遍历次数不能到最后一块
offset += 2;
/* code */
}
if (n % 2)
{
res[mid][mid] = count;
}
return res;
}
};
// @lc code=end
count;
}
return res;
}
};
// @lc code=end