给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
提示:
1 <= n <= 20
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/spiral-matrix-ii
#include<iostream>
#include<vector>
using namespace std;
/*思路:找规律,给出一个数n,可以把输出看成若干个正方形嵌套,最外层为n*n的正方形,次外层为(n-2)*(n-2)的正方形,最内层为1*1或者2*2的小正方形。*/
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> _v1(n,vector<int>(n,0));
int i = 1, j = 0, _row1 = 0, _column1 = 0, _row2 = n - 1, _column2 = n - 1;
if (n % 2 == 1)
_v1[n / 2][n / 2] = n * n;
while (n >= 1)
{
for ( j = _column1; j < _column2; j++)
_v1[_row1][j] = i++;
for (j = _row1; j < _row2; j++)
_v1[j][_column2] = i++;
for (j = _column2; j > _column1; j--)
_v1[_row2][j] = i++;
for (j = _row2; j > _row1; j--)
_v1[j][_column1] = i++;
n -= 2;
_row1++;
_row2--;
_column1++;
_column2--;
}
return _v1;
}
};
//test
int main()
{
int n;
cin >> n;
Solution s1;
vector<vector<int>> v1 = s1.generateMatrix(n);
for (auto k : v1)
{
for (int i = 0; i < n; i++)
{
cout << k[i]<<" ";
}
cout << endl;
}
}