网络异常,图片无法展示
|
题目
矩阵对角线 是一条从矩阵最上面行或者最左侧列中的某个元素开始的对角线,沿右下方向一直到矩阵末尾的元素。例如,矩阵 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.length n == mat[i].length 1 <= m, n <= 100 1 <= mat[i][j] <= 100
解题思路
class Solution: def diagonalSort(self, mat: List[List[int]]) -> List[List[int]]: row , col = len(mat), len(mat[0]) # 配置遍历的初始点数组,然后进行遍历 startPoints = [(0,x) for x in range(col)]+[ (y,0) for y in range(row)] startPoints.pop(0)#把重复的(0,0)去掉 # print(startPoints) for x, y in startPoints: step = min(abs(row-1-x),abs(col-1-y))#先获取行走步数 # 获取斜线数组 lineList = [(x+i, y+i) for i in range(step+1)] # 获取斜线上全部数组的内容,然后排序,重新赋值 pointList = [mat[i][j] for i,j in lineList] # print(pointList) pointList.sort() for i, j in lineList: mat[i][j] = pointList.pop(0) # print(mat) return mat if __name__ == '__main__': mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]] ret = Solution().diagonalSort(mat) print(ret)