2022年11月2日 星期三

[54] Spiral Matrix (TBD?!)

應該要來一個好看一點的寫法的
但是這題花太多時間了
先這樣吧哈哈哈~~~(逃走)
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */


int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
    *returnSize= matrixSize * matrixColSize[0];
    int *returnArray = malloc (sizeof(int)* (*returnSize));

    int direction=0;//0: right, 1:down, 2:left, 3: up
    int rmax = matrixSize;
    int rmin = 0;
    int cmax= matrixColSize[0];
    int cmin = 0;    
    for (int i=0; i< (*returnSize);)
    {
        if (direction == 0)
        {
            for (int k=cmin; k<cmax;k++)
                returnArray[i++] = matrix[rmin][k];
            rmin++;
            direction = 1;
        }
        else if (direction == 1)
        {
            for (int k=rmin; k<rmax;k++)
                returnArray[i++] = matrix[k][cmax-1];
            cmax--;
            direction = 2;
        }
        else if (direction == 2)
        {
            for (int k=cmax-1; k>=cmin;k--)
                returnArray[i++] = matrix[rmax-1][k];
            rmax--;
            direction = 3;
        }
        else
        {
            for (int k=rmax-1; k>=rmin;k--)
                returnArray[i++] = matrix[k][cmin];
            cmin++;
            direction = 0;
        }
    }
    return returnArray;
}

ps. 把direction 縮進for 回圈裡面 direction = ((direction+1)%4) 寫起來比較漂亮!
但變成每次都要運算一次?!(嗎XD)

沒有留言:

張貼留言