题解 | #顺时针打印矩阵#
顺时针打印矩阵
http://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a
void print_core(int** matrix,int *a, int R,int C,int begin_r,int begin_c)
{
int r,c;
if((2*begin_r)>R-1||(2*begin_c)>C-1)//矩阵中没有元素了
return;
if(R-2*begin_r==1) //还剩一行
{
for(c=begin_c;c<C-begin_c;c++)
a[c-begin_c]=matrix[begin_r][c];
return;
}
else if(C-2*begin_c==1) //还剩一列
{
for(r=begin_r;r<R-begin_r;r++)
a[r-begin_r]=matrix[r][begin_c];
return;
}
//顺时针打印
for(c=begin_c;c<C-begin_c-1;c++)
{
*a = matrix[begin_r][c];
a++;
}
for(r=begin_r;r<R-begin_r-1;r++)
{
*a = matrix[r][C-begin_c-1];
a++;
}
for(c=C-begin_c-1;c>begin_c;c--)
{
*a = matrix[R-begin_r-1][c];
a++;
}
for(r=R-begin_r-1;r>begin_r;r--)
{
*a = matrix[r][begin_c];
a++;
}
print_core(matrix,a,R,C,begin_r+1,begin_c+1);//打印剩下的部分
}
int* printMatrix(int** matrix, int matrixRowLen, int* matrixColLen, int* returnSize ) {
int *a=(int*)malloc(sizeof(int)*(matrixRowLen*(*matrixColLen)));
*returnSize=matrixRowLen*(*matrixColLen);
if(*returnSize==0)
return NULL;
print_core(matrix,a,matrixRowLen,(*matrixColLen),0,0);
return a;
}