程式語言 - LeetCode - C - 54. Spiral Matrix



題目:


解答:

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize)
{
    int i = 0;
    int t = 0;
    int b = matrixSize - 1;
    int l = 0;
    int r = matrixColSize[0] - 1;
    int r_cnt = 0;
    int* r_buf = calloc(matrixSize * matrixColSize[0], sizeof(int));

    while (t <= b && l <= r) {
        for (i = l; i <= r; ++i) {
            r_buf[r_cnt++] = matrix[t][i];
        }
        t += 1;

        for (i = t; i <= b; ++i) {
            r_buf[r_cnt++] = matrix[i][r];
        }
        r -= 1;

        if (t <= b) {
            for (i = r; i >= l; --i) {
                r_buf[r_cnt++] = matrix[b][i];
            }
            b -= 1;
        }

        if (l <= r) {
            for (i = b; i >= t; --i) {
                r_buf[r_cnt++] = matrix[i][l];
            }
            l += 1;
        }
    }

    *returnSize = r_cnt;

    return r_buf;    
}