0%

LeetCode 1329. Sort the Matrix Diagonally

题目

原题在此

A matrix diagonal is a diagonal line of cells starting from some cell in either the topmost row or leftmost column and going in the bottom-right direction until reaching the matrix’s end. For example, the matrix diagonal starting from mat[2][0], where mat is a 6 x 3 matrix, includes cells mat[2][0], mat[3][1], and mat[4][2].

Given an m x n matrix mat of integers, sort each matrix diagonal in ascending order and return the resulting matrix.


Example 1:
Input: mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]]
Output: [[1,1,1,1],[1,2,2,2],[1,2,3,3]]

Constraints:

  • m == mat.length
  • n == mat[i].length
  • 1 <= m, n <= 100
  • 1 <= mat[i][j] <= 100

解析

下标i - j相等的元素在一条斜线上, 装在一起排序再装回去就好. 用各种语言的标准库实现会很容易.

c++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {
int m = mat.size(), n = mat[0].size();
unordered_map<int, priority_queue<int, vector<int>, greater<int>>> map;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
map[i - j].push(mat[i][j]);
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
mat[i][j] = map[i - j].top(); map[i - j].pop();
}
}
return mat;
}
};