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]
c语言版
十分暴力。
#include <stdio.h>
#include <stdlib.h>
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize) {
int row = matrixSize;
int column = *matrixColSize;
int x;
*returnSize = row * column;
int* Order = (int*)malloc(*returnSize * sizeof(int));
int shortest= row<column?row:column;
if (shortest % 2 == 1) {
x = shortest / 2 + 1;
} else {
x = shortest / 2;
}
int index = 0;
for (int k = 0; k < x; k++) {
// Print top row from left to right
for (int i = k; i < column - k; i++) {
Order[index++] = matrix[k][i];
}
// Print right column from top to bottom
for (int i = k + 1; i < row - k; i++) {
Order[index++] = matrix[i][column - k - 1];
}
// Print bottom row from right to left
if (k < row - k - 1) { // Ensure there are rows left to print
for (int i = column - k - 2; i >= k; i--) {
Order[index++] = matrix[row - k - 1][i];
}
}
// Print left column from bottom to top
if (k < column - k - 1) { // Ensure there are columns left to print
for (int i = row - k - 2; i > k; i--) {
Order[index++] = matrix[i][k];
}
}
}
return Order;
}