这道题主要考察利用画图解决抽象问题。
具体分析参考剑指offer29.
P.S. 在编写代码时需要将*returnSize赋值,否则会出错。
时间和内存消耗以及源代码如下:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
if (matrix != NULL && matrixSize != 0)
{
*returnSize = matrixSize*(*matrixColSize);
int* printMatrix = (int*)malloc((*returnSize)*sizeof(int));
int start = 0;
int num = 0;
int maxX, maxY;
int i, j;
while ((start*2) < matrixSize && (start*2) < (*matrixColSize))
{
maxX = *matrixColSize - start - 1;
maxY = matrixSize - start - 1;
for (i = start; i <= maxX; i++)
{
printMatrix[num] = matrix[start][i];
num++;
}
if (maxY > start)
{
for (j = start+1; j <= maxY; j++)
{
printMatrix[num] = matrix[j][maxX];
num++;
}
}
if (maxY > start && maxX > start)
{
for (i = maxX-1; i >= start; i--)
{
printMatrix[num] = matrix[maxY][i];
num++;
}
}
if (maxY > (start+1) && maxX > start)
{
for (j = maxY-1; j > start; j--)
{
printMatrix[num] = matrix[j][start];
num++;
}
}
start++;
}
return printMatrix;
}
*returnSize=0;
return NULL;
}