一.题目
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
二.代码(C)
/**
* 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==NULL)
{
*returnSize = 0;
return NULL;
}
*returnSize = matrixSize*(*matrixColSize);
int* y;
y =(int *)malloc(*returnSize*sizeof(int));
memset(y,0,*returnSize*sizeof(int));
int i=0,j=0,k=0;
//char flag1,flag2;
printf("hang=%d,lie=%d\n",*matrixColSize,matrixSize);
int rowMin=0,rowMax=matrixSize-1;
int columnMin=0,columnMax=*matrixColSize-1;
while(rowMin<=rowMax && columnMin<=columnMax)
{
printf("\nrowMin=%d,rowMax=%d,columnMin=%d,columnMax=%d\t",rowMin,rowMax,columnMin,columnMax);
for(j=columnMin;j<=columnMax;j++)
{
printf("%d ",matrix[i][j]);
y[k] = matrix[i][j];
k++;
}
j--;
for(i=rowMin+1;i<=rowMax;i++)
{
printf("%d ",matrix[i][j]);
y[k] = matrix[i][j];
k++;
}
i--;
for(j=j-1;j>=columnMin;j--)
{
if(rowMin==rowMax)
break;
printf("%d ",matrix[i][j]);
y[k] = matrix[i][j];
k++;
}
j++;
for(i=i-1;i>rowMin;i--)
{
if(columnMin==columnMax)
break;
printf("%d ",matrix[i][j]);
y[k] = matrix[i][j];
k++;
}
i++;
rowMin++;
rowMax--;
columnMin++;
columnMax--;
printf("\nrowMin=%d,rowMax=%d,columnMin=%d,columnMax=%d\t",rowMin,rowMax,columnMin,columnMax);
}
return y;
}
三.提交记录
四.备注
按层索引,最外层->次外层->…
转载:https://blog.csdn.net/Umbraner/article/details/101373913
查看评论