原题:
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
You should return [1,2,3,6,9,8,7,4,5]
.
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* spiralOrder(int** matrix, int matrixRowSize, int matrixColSize) {
int amount = (matrixRowSize)*(matrixColSize);
int* res=(int*)malloc(sizeof(int)*amount);
//printf("%d",amount);
int count=0;
int l,r,t,b;
l=0;
t=0;
r=matrixColSize-1;
b=matrixRowSize-1;
int flag=0;
while(count!=amount)
{
if(flag%4==0)
{
for(int k=l;k<=r;k++)
{
*(res+count)=matrix[t][k];
count++;
}
printf("%d",count);
t++;
}
else if(flag%4==1)
{
for(int k=t;k<=b;k++)
{
*(res+count)=matrix[k][r];
count++;
}
r--;
}
else if(flag%4==2)
{
for(int k=r;k>=l;k--)
{
*(res+count)=matrix[b][k];
count++;
}
b--;
}
else
{
for(int k=b;k>=t;k--)
{
*(res+count)=matrix[k][l];
count++;
}
l++;
}
flag++;
}
return res;
}
设定四个边界进行条件判断就好。