目录
1.题目
矩阵对角线 是一条从矩阵最上面行或者最左侧列中的某个元素开始的对角线,沿右下方向一直到矩阵末尾的元素。例如,矩阵 mat
有 6
行 3
列,从 mat[2][0]
开始的 矩阵对角线 将会经过 mat[2][0]
、mat[3][1]
和 mat[4][2]
。
给你一个 m * n
的整数矩阵 mat
,请你将同一条 矩阵对角线 上的元素按升序排序后,返回排好序的矩阵。
2.题解
class Solution {
public:
vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {
int n=mat.size(),m=mat[0].size();
vector<vector<int> > diag(m+n);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
diag[i-j+m].push_back(mat[i][j]);
}
}
for(auto & d:diag){
sort(d.rbegin(),d.rend());
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
mat[i][j]=diag[i-j+m].back();
diag[i-j+m].pop_back();
}
}
return mat;
}
};
巧妙之处在于对角线的映射,利用对于不同的对角线映射在i-j+m上非常巧妙。