1424. 对角线遍历 II
给你一个列表 nums ,里面每一个元素都是一个整数列表。请你依照下面各图的规则,按顺序返回 nums 中对角线上的整数。
示例 1:
输入:nums = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,4,2,7,5,3,8,6,9]
示例 3:
输入:nums = [[1,2,3],[4],[5,6,7],[8],[9,10,11]]
输出:[1,4,2,5,3,8,6,9,7,10,11]
示例 4:
输入:nums = [[1,2,3,4,5,6]]
输出:[1,2,3,4,5,6]
解题代码如下:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* findDiagonalOrder(int** nums, int numsSize, int* numsColSize, int* returnSize){
int i;
int n=numsSize;
int colmax=0;
for(i=0;i<numsSize;i++){
if(numsColSize[i]>colmax){
colmax=numsColSize[i];
}
}
printf("n %d %d",n,colmax);
int *re=(int *)malloc(sizeof(int)*(n*colmax+5));
int size=0;
for(i=0;i<n;i++){
re[size++]=nums[i][0];
int x=0;
int y=i;
while(x+1<=i&&y-1>=0){
x=x+1;
y=y-1;
if(numsColSize[y]>x){
re[size++]=nums[y][x];
}
}
}
for(i=1;i<colmax;i++){
if(numsColSize[n-1]>i)
re[size++]=nums[n-1][i];
// printf("df");
int x=i;
int y=n-1;
while(x+1<=colmax-1&&y-1>=0){
// printf("%d %d",x+1,y-1);
x=x+1;
y=y-1;
if(numsColSize[y]>x){
re[size++]=nums[y][x];
}
}
}
*returnSize=size;
return re;
}