给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
思路一:模拟题意
cpp
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
int m = matrixSize;
int n = matrixColSize[0];
int *res = (int*)malloc(sizeof(int) * m * n);
int i,idx = 0,up = 0,down = m - 1,left = 0,right = n - 1;
while (up <= down && left <= right) {
for (i = left; i <= right; i++) {
res[idx++] = matrix[up][i];
}
up++;
for (i = up; i <= down; i++) {
res[idx++] = matrix[i][right];
}
right--;
for (i = right; i >= left && up <= down; i--) {
res[idx++] = matrix[down][i];
}
down--;
for (i = down; i >= up && left <= right; i--) {
res[idx++] = matrix[i][left];
}
left++;
}
*returnSize = idx;
return res;
}
时间复杂度O(n^2),空间复杂度O(n)
分析:
本题要按顺时针螺旋顺序输出矩阵内的数,可想到利用循环模拟题意作答,设置left,right,up,down来限制输出,使res数组按顺时针顺序存储,最后输出res。
总结:
本题考察对矩阵的理解,模仿题意设置限制条件即可得到答案。