1.输入的是m*n的矩阵,采用大数组包小数组的形式,每行为一个数组,m个数组构成一个大数组。
2.输出的是一个一维数组,按照上-右-下-左的形式一次一条边地输出。
3.因为可能在上下左右任何一条边结束,所以在输出每条边时都要判断是否结束。
4.每遍历完一条边,该边的边界值就会改变,而且会影响到下一条边的输入,要注意。
int* printMatrix(int** matrix, int matrixRowLen, int* matrixColLen, int* returnSize ) { int* arr; //定义返回数组 int cnt = matrixRowLen * (*matrixColLen); //元素个数 *returnSize = cnt; //控制返回数组的大小 arr = (int*)malloc(sizeof(int) * cnt); //新数组空间大小 int up = 0, down = matrixRowLen -1; //上下边界 int left = 0, right = (*matrixColLen) - 1; //左右边界 int i = 0, k = 0; //双指针,同步移动 while(1){ for(i = left; i<=right; i++) arr[k++] = matrix[up][i]; //上边 if(k >= cnt) break; up++; for(i = up; i<=down; i++) arr[k++] = matrix[i][right]; //右边 if(k >= cnt) break; right--; for(i = right; i>=left; i--) arr[k++] = matrix[down][i]; //下边 if(k >= cnt) break; down--; for(i = down; i>=up; i--) arr[k++] = matrix[i][left]; //左边 if(k >= cnt) break; left++; } return arr; }