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 ] ]
这道题是螺旋形生成矩阵,题目难度为Medium。
题目和第54题相关,基本的处理方法是类似的,有疑问的同学请查看第54题(传送门)。具体代码:
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> rst(n, vector<int>(n, 0));
int lRow = 0, rRow = n - 1;
int lCol = 0, rCol = n - 1;
int pos = 0, state = 0, cnt = 1;
while(lRow<=rRow && lCol<=rCol) {
switch(state) {
case 0: {
pos = lCol;
while(pos <= rCol)
rst[lRow][pos++] = cnt++;
lRow++;
break;
}
case 1: {
pos = lRow;
while(pos <= rRow)
rst[pos++][rCol] = cnt++;
rCol--;
break;
}
case 2: {
pos = rCol;
while(pos >= lCol)
rst[rRow][pos--] = cnt++;
rRow--;
break;
}
default: {
pos = rRow;
while(pos >= lRow)
rst[pos--][lCol] = cnt++;
lCol++;
break;
}
}
state = (state + 1) % 4;
}
return rst;
}
};