题目
Spiral Matrix
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].
标签
Array
难度
中等
分析
题目意思是给定m*n维的数组,按顺时针遍历数组,输出如上。
解题思路是,按照以下顺序遍历数组,直到循环结束
1. 从colBegin到colEnd遍历,rowBegin++
2. 从rowBegin到rowEnd遍历,colEnd–
3. 从colEnd到colBegin遍历,rowEnd–
4. 从rowEnd到rowBegin遍历,colBegin++
C代码实现
int* spiralOrder(int** matrix, int matrixRowSize, int matrixColSize)
{
int * ret = (int *)malloc(matrixRowSize*matrixColSize*sizeof(int));
int k=0;
int rowBegin=0, rowEnd=matrixRowSize-1;
int colBegin=0, colEnd=matrixColSize-1;
int i=0;
while((rowBegin<=rowEnd) && (colBegin<=colEnd))
{
for(i=colBegin; i<=colEnd; i++)
ret[k++] = matrix[rowBegin][i];
rowBegin++;
for(i=rowBegin; i<=rowEnd; i++)
ret[k++] = matrix[i][colEnd];
colEnd--;
if(rowBegin<=rowEnd)
{
for(i=colEnd; i>=colBegin; i--)
ret[k++] = matrix[rowEnd][i];
}
rowEnd--;
if(colBegin<=colEnd)
{
for(i=rowEnd; i>=rowBegin; i--)
ret[k++] = matrix[i][colBegin];
}
colBegin++;
}
return ret;
}