螺旋矩阵

题目:

给定一个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;
}