给你一个 m * n
的整数矩阵 mat
,请你将同一条对角线上的元素(从左上到右下)按升序排序后,返回排好序的矩阵。
示例 1:
输入:mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]]
输出:[[1,1,1,1],[1,2,2,2],[1,2,3,3]]
提示:
m == mat.length
n == mat[i].length
1 <= m, n <= 100
1 <= mat[i][j] <= 100
C++
class Solution {
public:
void help(vector<vector<int>>& mat,int len, int r, int c)
{
vector<int> tmp;
int k=0;
int y=r;
int x=c;
while(k<len)
{
tmp.push_back(mat[y][x]);
y++;
x++;
k++;
}
sort(tmp.begin(),tmp.end());
y=r;
x=c;
k=0;
while(k<len)
{
mat[y][x]=tmp[k];
k++;
y++;
x++;
}
}
vector<vector<int>> diagonalSort(vector<vector<int>>& mat)
{
int m=mat.size();
int n=mat[0].size();
int t=min(m,n); //最长对角线
int num=abs(m-n)+1; //num个最长对角线
int r=m-1;
int c=0;
for(int i=1;i<t;i++)
{
help(mat,i,r,c);
r--;
}
for(int i=0;i<num;i++)
{
help(mat,t,r,c);
if(m<=n)
{
c++;
}
else
{
r--;
}
}
for(int i=t-1;i>=1;i--)
{
help(mat,i,r,c);
c++;
}
return mat;
}
};