题解 | #顺时针打印矩阵#
顺时针打印矩阵
https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param matrix int整型二维数组 * @param matrixRowLen int matrix数组行数 * @param matrixColLen int* matrix数组列数 * @return int整型一维数组 * @return int* returnSize 返回数组行数 */ #include <stdlib.h> enum{ right, left, up, down, }Direction; int* printMatrix(int** matrix, int matrixRowLen, int* matrixColLen, int* returnSize ) { // write code here int i=0, j=0; //矩阵索引 int lMargin=0, rMargin=0, uMargin=0, dMargin=0; //边界 int *ret; Direction = right; //遍历方向 *returnSize = matrixRowLen*matrixColLen[0]; //返回值的数量,即矩阵元素的个数 ret = (int*)malloc(sizeof(int)*(*returnSize)); //给打印数组申请空间 for(int n=0; n<matrixRowLen*matrixColLen[0]; n++){ ret[n] = matrix[i][j]; switch (Direction) { case right:{ if(j+rMargin+1 < matrixColLen[0]){ //如果下一位没超过该行,则i++ j++; }else{ //该行遍历完成,换方向 Direction = down; rMargin++; i++; //向下移动一位 } break; } case down:{ if(i+dMargin+1 < matrixRowLen){ i++; }else{ Direction = left; dMargin++; j--; } break; } case left:{ if(j-lMargin-1 >= 0){ j--; }else{ Direction = up; lMargin++; i--; } break; } case up:{ if(i-uMargin-1 > 0){ i--; }else{ Direction = right; uMargin++; j++; } break; } } } return ret; }