54. 螺旋矩阵 给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。 输入:[[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]。c语言实现
时间: 2023-09-14 18:09:28 浏览: 98
以下是在 C 语言中实现螺旋矩阵的代码:
```c
#include <stdio.h>
#include <stdlib.h>
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
if (matrixSize == 0) {
*returnSize = 0;
return NULL;
}
int top = 0, bottom = matrixSize - 1;
int left = 0, right = matrixColSize[0] - 1;
int* res = (int*)malloc(sizeof(int) * matrixSize * matrixColSize[0]);
int k = 0;
while (top <= bottom && left <= right) {
for (int i = left; i <= right; i++) {
res[k++] = matrix[top][i];
}
top++;
for (int i = top; i <= bottom; i++) {
res[k++] = matrix[i][right];
}
right--;
if (top <= bottom) {
for (int i = right; i >= left; i--) {
res[k++] = matrix[bottom][i];
}
bottom--;
}
if (left <= right) {
for (int i = bottom; i >= top; i--) {
res[k++] = matrix[i][left];
}
left++;
}
}
*returnSize = k;
return res;
}
int main() {
int matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int* matrixSize = 3;
int* matrixColSize[3] = {3, 3, 3};
int returnSize = 0;
int* res = spiralOrder(matrix, matrixSize, matrixColSize, &returnSize);
for (int i = 0; i < returnSize; i++) {
printf("%d ", res[i]);
}
return 0;
}
```
这个代码的时间复杂度是 $O(mn)$,其中 $m$ 和 $n$ 分别是矩阵的行数和列数。
阅读全文