力扣螺旋矩阵IIc语言
时间: 2025-04-17 15:45:51 浏览: 22
### LeetCode 螺旋矩阵 II 的 C 语言实现
螺旋矩阵 II 需要在一个 n×n 的二维数组中按顺时针方向填充从 1 到 n² 的数字。以下是该问题的一种高效解决方法:
```c
/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
*/
int** generateMatrix(int n, int* returnSize, int** returnColumnSizes){
*returnSize = n;
*returnColumnSizes = malloc(sizeof(int) * n);
int **matrix = (int **)malloc(n * sizeof(int *));
for (int i = 0; i < n; ++i) {
matrix[i] = (int *)calloc(n, sizeof(int));
(*returnColumnSizes)[i] = n;
}
int num = 1;
int layers = (n + 1) / 2;
for (int layer = 0; layer < layers; ++layer) {
// Top row from left to right
for (int col = layer; col < n - layer && num <= n * n; ++col)
matrix[layer][col] = num++;
// Right column from top to bottom
for (int row = layer + 1; row < n - layer && num <= n * n; ++row)
matrix[row][n - layer - 1] = num++;
// Bottom row from right to left
for (int col = n - layer - 2; col >= layer && num <= n * n; --col)
matrix[n - layer - 1][col] = num++;
// Left column from bottom to top
for (int row = n - layer - 2; row > layer && num <= n * n; --row)
matrix[row][layer] = num++;
}
return matrix;
}
```
此算法采用分层的方式逐圈填充矩阵,每完成一圈就向内收缩一层直到填满整个矩阵[^1]。
#### 关键点解析
- 函数接收参数 `n` 表示矩阵大小,并返回一个已经按照题目要求填充好的二维数组。
- 使用四个循环分别处理每一圈中的上边、右边、下边以及左边的数据填充工作。
- 特别注意边界条件的判断以防止越界访问或重复赋值的情况发生。
阅读全文
相关推荐


















