一.题目描述:1329. 将矩阵按对角线排序
矩阵对角线 是一条从矩阵最上面行或者最左侧列中的某个元素开始的对角线,沿右下方向一直到矩阵末尾的元素。例如,矩阵 mat
有 6
行 3
列,从 mat[2][0]
开始的 矩阵对角线 将会经过 mat[2][0]
、mat[3][1]
和 mat[4][2]
。
给你一个 m * n
的整数矩阵 mat
,请你将同一条 矩阵对角线 上的元素按升序排序后,返回排好序的矩阵。
二.思路分析:
是道简单的打卡题,可以暴力直解
遍历数组所有元素,将每一个对角线的元素全部放入另一个数组中,后将数组元素排序,再遍历写入数组中去。
数组元素排序:
for(auto& d:ans)
{
sort(d.rbegin(),d.rend());
//在 C++ 中,std::sort 函数用于对容器中的元素进行排序,默认是按升序排序。而 d.rbegin() 和 d.rend() 是 std::vector 类的成员函数,分别返回指向向量 d 最后一个元素和第一个元素之前的迭代器,但是是逆序的,即从大到小排序
}
三.代码
class Solution {
public:
vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {
int row=mat.size();
int col=mat[0].size();
vector<vector<int>> ans(row+col);
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
ans[i-j+row].push_back(mat[i][j]);
}
}
for(auto& d:ans)
{
sort(d.rbegin(),d.rend());
}
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
mat[i][j]=ans[i-j+row].back();
ans[i-j+row].pop_back();
}
}
return mat;
}
};
四.总结
简单的打卡题呢,但是也有坑,对于 对角线元素的处理还是有点技巧的,完结撒花❀