應該要來一個好看一點的寫法的
但是這題花太多時間了
先這樣吧哈哈哈~~~(逃走)
/**
* 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)
沒有留言:
張貼留言