题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
题目分析:
以顺时针的顺序打印,那我们可以将其分成四个步骤:
1. 从左往右
2. 从上往下
3. 从右往左
4. 从下往上
因此我们可以将矩阵的四个边所在的行或列分别表示出来。
每一次打印完以后我们将其所在的行或者列进行+-1,用来缩小矩阵,来说明我们已经走过此段。
代码如下:
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
if(matrixSize==0){
*returnSize=0;
return NULL;
}
*returnSize=matrixSize*(*matrixColSize);//求出矩阵中元素个数
int up=0,down=matrixSize-1;//四个边界
int left=0,right=*matrixColSize-1;
int*ret=(int*)malloc(sizeof(int)*(*returnSize));//构造数组
int index=0;
while(index<*returnSize){
for(int i=left;index<*returnSize&&i<=right;i++){//从左->右
ret[index++]=matrix[up][i];
}
up++; //缩小矩阵
for(int i=up;index<*returnSize&&i<=down;i++){//从上->下
ret[index++]=matrix[i][right];
}
right--;
for(int i=right;index<*returnSize&&i>=left;i--){//从右->左
ret[index++]=matrix[down][i];
}
down--;
for(int i=down;index<*returnSize&&i>=up;i--){//从下->上
ret[index++]=matrix[i][left];
}
left++;
}
return ret;
}



