# 题 1
54. 螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入: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]
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100
题解
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize) {
*returnSize = matrixSize * (*matrixColSize);
int* arr = (int*)malloc(*returnSize * sizeof(int));
int num = 0;
int UP = 0;
int DOWN = matrixSize - 1;
int LEFT = 0;
int RIGHT = *matrixColSize - 1;
while (LEFT <= RIGHT && UP <= DOWN) {
for (int i = LEFT; i <= RIGHT && num < *returnSize; i++) {
arr[num++] = matrix[UP][i];
}
UP++;
for (int i = UP; i <= DOWN && num < *returnSize; i++) {
arr[num++] = matrix[i][RIGHT];
}
RIGHT--;
for (int i = RIGHT; i >= LEFT && num < *returnSize; i--) {
arr[num++] = matrix[DOWN][i];
}
DOWN--;
for (int i = DOWN; i >= UP && num < *returnSize; i--) {
arr[num++] = matrix[i][LEFT];
}
LEFT++;
}
return arr;
}
//通过设置最上,最下,最左,最右作为边界条件,按照左下右上的顺序,输出到返回数组中,并修改边界,通过判定边界是否重合来决定何时停止循环