LeetCode 题解工作台
将矩阵按对角线排序
矩阵对角线 是一条从矩阵最上面行或者最左侧列中的某个元素开始的对角线,沿右下方向一直到矩阵末尾的元素。例如,矩阵 mat 有 6 行 3 列,从 mat[2][0] 开始的 矩阵对角线 将会经过 mat[2][0] 、 mat[3][1] 和 mat[4][2] 。 给你一个 m * n 的整数矩阵…
3
题型
7
代码语言
3
相关题
当前训练重点
中等 · 数组·排序
答案摘要
我们可以将矩阵中的每条对角线看作一个数组,然后对这些数组进行排序,最后再将排序后的元素填回原矩阵中。 具体地,我们记矩阵的行数为 ,列数为 。由于同一条对角线上的任意两个元素 $(i_1, j_1)$ 和 $(i_2, j_2)$ 满足 $j_1 - i_1 = j_2 - i_2$,我们可以根据 $j - i$ 的值来确定每条对角线。为了保证值为正数,我们加上一个偏移量 ,即 $m - i + …
Interview AiBoxInterview AiBox 实时 AI 助手,陪你讲清 数组·排序 题型思路
题目描述
矩阵对角线 是一条从矩阵最上面行或者最左侧列中的某个元素开始的对角线,沿右下方向一直到矩阵末尾的元素。例如,矩阵 mat 有 6 行 3 列,从 mat[2][0] 开始的 矩阵对角线 将会经过 mat[2][0]、mat[3][1] 和 mat[4][2] 。
给你一个 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]]
示例 2:
输入:mat = [[11,25,66,1,69,7],[23,55,17,45,15,52],[75,31,36,44,58,8],[22,27,33,25,68,4],[84,28,14,11,5,50]] 输出:[[5,17,4,1,52,7],[11,11,25,45,8,69],[14,23,25,44,58,15],[22,27,31,36,50,66],[84,28,75,33,55,68]]
提示:
m == mat.lengthn == mat[i].length1 <= m, n <= 1001 <= mat[i][j] <= 100
解题思路
方法一:排序
我们可以将矩阵中的每条对角线看作一个数组,然后对这些数组进行排序,最后再将排序后的元素填回原矩阵中。
具体地,我们记矩阵的行数为 ,列数为 。由于同一条对角线上的任意两个元素 和 满足 ,我们可以根据 的值来确定每条对角线。为了保证值为正数,我们加上一个偏移量 ,即 。
最后,我们将每条对角线上的元素排序后填回原矩阵中即可。
时间复杂度 ,空间复杂度 。其中 和 分别是矩阵的行数和列数。
class Solution:
def diagonalSort(self, mat: List[List[int]]) -> List[List[int]]:
m, n = len(mat), len(mat[0])
g = [[] for _ in range(m + n)]
for i, row in enumerate(mat):
for j, x in enumerate(row):
g[m - i + j].append(x)
for e in g:
e.sort(reverse=True)
for i in range(m):
for j in range(n):
mat[i][j] = g[m - i + j].pop()
return mat
复杂度分析
| 指标 | 值 |
|---|---|
| 时间 | Depends on the final approach |
| 空间 | Depends on the final approach |
面试官常问的追问
外企场景- question_mark
Can the candidate identify the diagonals efficiently?
- question_mark
Do they choose the correct sorting technique for each diagonal?
- question_mark
Are they able to place the sorted values back into the matrix with minimal overhead?
常见陷阱
外企场景- error
Incorrectly identifying or indexing diagonals, leading to misplaced values.
- error
Forgetting to sort diagonals separately or applying sorting to the entire matrix.
- error
Not handling edge cases like small matrices or diagonals with only one element.
进阶变体
外企场景- arrow_right_alt
Handle larger matrices with m, n up to 100.
- arrow_right_alt
Optimize space usage by avoiding storing entire diagonals when possible.
- arrow_right_alt
Implement diagonal sorting for non-square matrices.