题目链接:https://leetcode.com/problems/spiral-matrix-ii/
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 ] ]
思路:和 Spiral Matrixs思路一样,同样是设置行进向量,在碰到边界的时候改变一下向量的方向和左右上下边界。
代码如下:
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
if(n < 1) return {};
int left=0, right=n-1, top=0, bot=n-1, val=1, dx=1, dy=0 , x=0, y=0;
vector<vector<int>> ans(n, vector<int>(n));
while(val <= n*n)
{
ans[y][x] = val++;
x += dx, y += dy;
if(x>right) dx=0, dy=1, x--, y++, top++;
else if(x<left) dx=0, dy=-1, x++, y--, bot--;
else if(y>bot) dx=-1, dy=0, x--, y--, right--;
else if(y<top) dx=1, dy=0, x++, y++, left++;
}
return ans;
}
};