leetcode 54 螺旋矩阵 C语言实现

无人久伴 提交于 2020-02-11 14:33:18

题目

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;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!