一、问题描述
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3
,
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
二、思路
从外到内打印1-n *n个数,我们只需要设置一个大循环中包含四个小循环即可。先从左到右打印,其次从上到下,然后从右到左,最后从下到上即可,最后改变循环条件++i。
三、代码
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> vec(n, vector<int>(n));
int i = 0, k = 1;
while(k <= n * n){
int j = i;
while(j < n - i){
vec[i][j++] = k++;
}
j = i + 1;
while(j < n -i){
vec[j++][n - i - 1] = k++;
}
j = n - i - 2;
while(j > i){
vec[n - i - 1][j--] = k++;
}
j = n - i - 1;
while(j > i){
vec[j--][i] = k++;
}
++i;
}
return vec;
}
};