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;
}

京公网安备 11010502036488号