LeetCode #54 Spiral Matrix

2021-04-16  本文已影响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;
}
上一篇下一篇

猜你喜欢

热点阅读