一个大小为 m x n
的矩阵 mat
,以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。
例如:
设纵坐标与横坐标相加=n
可知:n为偶数时,向右上遍历;
n为奇数时,向左下遍历。
代码实现:
int* findDiagonalOrder(int** mat, int matSize, int* matColSize, int* returnSize){
*returnSize=matSize*(*matColSize); //matSize为行数,*matColSize为列数,*matColSize可
if(*returnSize==0) return 0; //*matColSize可以用matColSize[0]来代替
int *mat_new=(int*)malloc(sizeof(int)*(*returnSize)); //创建一个数组存放遍历之后的数据
int i=0,j=0,n=0;
while(n<*returnSize){
mat_new[n]=mat[i][j];
if((i+j)%2==0){ //下标和为偶数,右上遍历
if(j<*matColSize-1){
j++;
if(i>0) i--;
}else
i++;
}
else{ //下标和为奇数,左下遍历
if(i<matSize-1){
i++;
if(j>0)j--;
}else
j++;
}
n++;
}
return mat_new;
}