美文网首页
LeetCode #54 Spiral Matrix

LeetCode #54 Spiral Matrix

作者: 刘煌旭 | 来源:发表于2021-04-16 01:55 被阅读0次
    Spiral_Matrix.png
    #define DIR_RIGHT 0
    #define DIR_DOWN 1
    #define DIR_LEFT 2
    #define DIR_UP 3
    void next(int *i, int *j, int *dir, int *right_barr, int *bottom_barr, int *left_barr, int *top_barr) {
        if (*dir == DIR_RIGHT) {
            if (*j == *right_barr) {
                (*right_barr)--;
                (*i)++;
                *dir = DIR_DOWN;
            } else {
                (*j)++;
            }
        } else if (*dir == DIR_DOWN) {
            if (*i == *bottom_barr) {
                (*bottom_barr)--;
                (*j)--;
                *dir = DIR_LEFT;
            } else {
                (*i)++;
            }
        } else if (*dir == DIR_LEFT) {
            if (*j == *left_barr) {
                (*left_barr)++;
                (*i)--;
                *dir = DIR_UP;
            } else {
                (*j)--;
            }
        } else if (*dir == DIR_UP) {
            if (*i == (*top_barr)) {
                (*top_barr)++;
                (*j)++;
                *dir = DIR_RIGHT;
            } else {
                (*i)--;
            }
        }
    }
    int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
        int right_barr = *matrixColSize - 1, bottom_barr = matrixSize - 1, left_barr = 0, top_barr = 1;
        int *ret = (int*)malloc(matrixSize * *matrixColSize * sizeof(*ret));
        int i = 0, j = 0, dir = 0, totalSize = matrixSize * *matrixColSize;
        *returnSize = 0;
        while (*returnSize < totalSize) {
            ret[(*returnSize)++] = matrix[i][j];
            next(&i, &j, &dir, &right_barr, &bottom_barr, &left_barr, &top_barr);
        }
        return ret;
    }
    

    相关文章

      网友评论

          本文标题:LeetCode #54 Spiral Matrix

          本文链接:https://www.haomeiwen.com/subject/txsslltx.html