leetcode题目路径
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
#include
#include
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize) {
if (matrixSize == 0) {
*returnSize = 0;
return NULL;
}
int m = matrixSize;
int n = matrixColSize[0];
int* result = (int*)malloc(m * n * sizeof(int));
int left = 0, right = n - 1, top = 0, bottom = m - 1;
int index = 0;
while (left <= right && top <= bottom) {
// Traverse from left to right
for (int i = left; i <= right; i++) {
result[index++] = matrix[top][i];
}
top++;
// Traverse from top to bottom
for (int i = top; i <= bottom; i++) {
result[index++] = matrix[i][right];
}
right--;
// Traverse from right to left
if (top <= bottom) {
for (int i = right; i >= left; i--) {
result[index++] = matrix[bottom][i];
}
bottom--;
}
// Traverse from bottom to top
if (left <= right) {
for (int i = bottom; i >= top; i--) {
result[index++] = matrix[i][left];
}
left++;
}
}
*returnSize = m * n;
return result;
}
int main() {
int matrixSize = 3;
int matrixColSize[] = {3, 3};
int** matrix = (int**)malloc(matrixSize * sizeof(int*));
for (int i = 0; i < matrixSize; i++) {
matrix[i] = (int*)malloc(matrixColSize[i] * sizeof(int));
}
// Fill the matrix with values
int value = 1;
for (int i = 0; i < matrixSize; i++) {
for (int j = 0; j < matrixColSize[i]; j++) {
matrix[i][j] = value++;
}
}
int returnSize = 0;
int* result = spiralOrder(matrix, matrixSize, matrixColSize, &returnSize);
// Print the result
for (int i = 0; i < returnSize; i++) {
printf("%d ", result[i]);
}
printf("\n");
// Clean up memory
for (int i = 0; i < matrixSize; i++) {
free(matrix[i]);
}
free(matrix);
free(result);
return 0;
}