1329. 将矩阵按对角线排序
矩阵对角线 是一条从矩阵最上面行或者最左侧列中的某个元素开始的对角线,沿右下方向一直到矩阵末尾的元素。例如,矩阵 mat
有 6
行 3
列,从 mat[2][0]
开始的 矩阵对角线 将会经过 mat[2][0]
、mat[3][1]
和 mat[4][2]
。
给你一个 m * n
的整数矩阵 mat
,请你将同一条 矩阵对角线 上的元素按升序排序后,返回排好序的矩阵。
示例 1:
|
|
示例 2:
|
|
提示:
m == mat.length
n == mat[i].length
1 <= m, n <= 100
1 <= mat[i][j] <= 100
普通题,但是耗时太久.
思路就是按照提示找到同一斜边的元素,arraylist排序,写回去。
问题在于找到同一斜边的元素,注意边界。我将遍历过程分成两段,分别是下三角和上三角,利用mat[i][j]的条件i<m&&j<n来控制边界。
|
|
看了题解,所有的同一斜边的元素有一个共同特征:i和j的差为定值,也就是说,给定i,j唯一确定是哪一条对角线,一共m+n-1个对角线,创建m+n-1个arraylist。
对每一条对角线上的元素进行排序。
填回去的操作:按照从左到右,从上往下遍历时,每次都是最小的在前,可以另外用一个数组保存,或者也可以将arraylist转成栈,按次序填回去的数一定是从小到大的。
别人的code:
|
|