leetcode-剑指29-OK

同主站54
address

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
    if((matrixSize==0)||(matrixColSize[0] == 0)){
        returnSize[0] = 0;
        return NULL;
    }
    returnSize[0] = matrixSize*matrixColSize[0];
    int *ans = (int *)malloc(sizeof(int)*returnSize[0]);
    int next = 0;
    void fill(int m){
        ans[next++] = m;
    }
    void round(int up, int down, int left,int right){
        if(up==down){
            for(int i = left;i<=right;i++)
                fill(matrix[up][i]);
        }else if(left==right){
            for(int i = up;i<=down;i++)
                fill(matrix[i][left]);
        }else{
            int i;
            for(i =left; i<=right; i++)
                fill(matrix[up][i]);
            for(i = up+1;i<=down;i++)
                fill(matrix[i][right]);
            for(i = right-1; i>=left;i--)
                fill(matrix[down][i]);
            for(i = down-1;i>up;i--)
                fill(matrix[i][left]);
        }
    }
    int up1=0, down1 =matrixSize-1,left1 = 0, right1 = matrixColSize[0] -1;
    while((down1>=up1)&&(right1>=left1)){
        round(up1,down1,left1,right1);
        up1++;
        down1--;
        left1++;
        right1--;
    }
    return ans;
}
原文地址:https://www.cnblogs.com/gallien/p/14323098.html