题目
leetcode 54
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
代码
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
*returnSize = 0;
if (matrixSize == 0) return 0;
int len = matrixSize * (*matrixColSize);
int *arr = (int *)malloc(sizeof(int) * len);
//左、右、上、下边界,dir方向
int l = 0, r = *matrixColSize - 1, s = 0, x = matrixSize - 1, dir = 0, k = 0;
while (l <= r && s <= x) {
switch (dir) {
case 0: {
for (int i = l; i <= r; i++) {
arr[k++] = matrix[s][i];
}
s++;
dir = 1;
} break;
case 1: {
for (int i = s; i <= x; i++) {
arr[k++] = matrix[i][r];
}
r--;
dir = 2;
} break;
case 2: {
for (int i = r; i >= l; i--) {
arr[k++] = matrix[x][i];
}
x--;
dir = 3;
} break;
case 3: {
for (int i = x; i >= s; i--) {
arr[k++] = matrix[i][l];
}
l++;
dir = 0;
} break;
default : break;
}
}
*returnSize = len;
return arr;
}