螺旋矩阵
题目:
给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。
示例:
输入:[[1,2,3],[4,5,6],[7,8,9]]
返回值:[1,2,3,6,9,8,7,4,5]
思路:
在给定的矩阵中,按照顺时针螺旋顺序输出矩阵中的所有元素。输出的螺旋方向为先从左到右,再从上到下,再从右到左,再从下到上......依次类推。故先确定矩阵的大小,按照上述顺序进行输出,每次到达矩阵边界时转向下一个方向。
代码示例:
```/**
*
* @param matrix int整型二维数组
* @param matrixRowLen int matrix数组行数
* @param matrixColLen int* matrix数组列数
* @return int整型一维数组
* @return int* returnSize 返回数组行数
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
int* spiralOrder(int** matrix, int matrixRowLen, int* matrixColLen, int* returnSize ) {
// write code here
int size = matrixRowLen * (* matrixColLen);
int* arr = (int*)malloc(sizeof(int)*size);
int i = 0;
int up = 0; //up=上
int down = matrixRowLen - 1;//down=下
int left = 0;//left=左
int right =* matrixColLen - 1;//right=右
*returnSize = 0;
while(1){
for (i = left;i <= right;i++){//从左到右
arr[*returnSize] = matrix[up][i];
*returnSize += 1;
}
up += 1;
if(up > down) break;
for (i = up;i <= down;i++){//从上到下
arr[*returnSize] = matrix[i][right];
*returnSize += 1;
}
right -= 1;
if(left > right) break;
for (i = right;i >= left;i--){//从右到左
arr[*returnSize] = matrix[down][i];
*returnSize += 1;
}
down -= 1;
if(up > down) break;
for (i = down;i >= up;i--){//从下到上
arr[*returnSize] = matrix[i][left];
*returnSize += 1;
}
left += 1;
if(left > right) break;
}
return arr;
}