Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3,
You should return the following matrix:
1 2 3
8 9 4
7 6 5
//1:特殊情况;2:顺时针遍历数组的时候只走n-1步骤
vector<vector<int> > generateMatrix(int n) {
vector<vector<int> > result(n, vector<int>(n, 0));
if(n <= 0)
{
return result;
}
if(n == 1)
{
result[0][0] = 1;
return result;
}
int count = 1;
int startX = 0;
int startY = 0;
while(n > 0)
{
generateMatrixCore(result, n, startX, startY, count);
startX++;
startY++;
n -= 2;
}
return result;
}
void generateMatrixCore(vector<vector<int> > &result, int n, int startX, int startY, int& count)
{
if(n == 1)
{
result[startX][startY] = count;
return ;
}
int endX = startX + n - 1;
int endY = startY + n - 1;
for(int i = startY; i < endY; i++)
{
result[startX][i] = count++;
}
for(int i = startX; i < endX; i++)
{
result[i][endY] = count++;
}
for(int i = endY; i > startY; i--)
{
result[endX][i] = count++;
}
for(int i = endX; i > startX; i--)
{
result[i][startY] = count++;
}
}
本文介绍了一个生成螺旋矩阵的算法,该算法能够根据给定的整数n生成一个n×n的螺旋矩阵,矩阵元素从1到n²按螺旋顺序填充。文章详细展示了核心函数generateMatrix的实现过程,包括初始化矩阵、定义边界条件以及使用四个循环来模拟螺旋遍历。
114

被折叠的 条评论
为什么被折叠?



