概述
498. 对角线遍历-遍历矩阵
给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。
示例 1:
输入:mat = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,4,7,5,3,6,8,9]
示例 2:
输入:mat = [[1,2],[3,4]]
输出:[1,2,3,4]
遍历之后,我们在做一个反序工作解题代码如下:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* findDiagonalOrder(int** mat, int matSize, int* matColSize, int* returnSize){
int n=matSize,m=matColSize[0];
int *re=(int *)malloc(sizeof(int)*(n*m+n+m));
int size=0;
int x=0,y=0;
int direction=0;
while(true){
if(y!=m){
int index_x=x,index_y=y;
y++;
re[size++]=mat[index_x][index_y];
while(index_x+1<n&&index_y-1>=0){
index_x++;
index_y--;
re[size++]=mat[index_x][index_y];
}
}
else{
x++;
if(x>=n){
break;
}
int index_x=x,index_y=y-1;
re[size++]=mat[index_x][index_y];
while(index_x+1<n&&index_y-1>=0){
index_x++;
index_y--;
re[size++]=mat[index_x][index_y];
}
}
if(direction%2==0){
re[size++]=-10000;
}
else{
re[size++]=-20000;
}
direction++;
}
for(int i=0;i<size;i++){
if(re[i]==-20000){
int j=i;
while(re[j]!=-10000&&j!=size){
j++;
}
for(int k=0;k<(j-i-1)/2;k++){
int t=re[i+1+k];
re[i+1+k]=re[j-1-k];
re[j-1-k]=t;
}
}
}
int resize=0;
for(int i=0;i<size;i++){
if(re[i]!=-10000&&re[i]!=-20000){
re[resize++]=re[i];
}
}
*returnSize=resize;
return re;
}
最后
以上就是灵巧唇彩为你收集整理的498. 对角线遍历-遍历矩阵的全部内容,希望文章能够帮你解决498. 对角线遍历-遍历矩阵所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复