初学python记录:力扣1329. 将矩阵按对角线排序

题目:

矩阵对角线 是一条从矩阵最上面行或者最左侧列中的某个元素开始的对角线,沿右下方向一直到矩阵末尾的元素。例如,矩阵 mat63 列,从 mat[2][0] 开始的 矩阵对角线 将会经过 mat[2][0]mat[3][1]mat[4][2]

给你一个 m * n 的整数矩阵 mat ,请你将同一条 矩阵对角线上的元素按升序排序后,返回排好序的矩阵。

思考:

因为每一条对角线都彼此平行互不干扰,所以我们可以遍历每一条对角线上的元素,将其看成一个新数组,从小到大排序后填回原来矩阵中对应的位置。代码如下:

python 复制代码
class Solution(object):
    def diagonalSort(self, mat):
        """
        :type mat: List[List[int]]
        :rtype: List[List[int]]
        """
        m = len(mat)
        n = len(mat[0])

        def diagonal(x, y, mat):
            # 遍历对角线上所有元素,看成一个新数组,从小到大排序
            diagonal_number = []
            i = x
            j = y
            while i < m and j < n:
                diagonal_number.append(mat[i][j])
                i += 1
                j += 1
            diagonal_number.sort()
            
            # 将排序后的元素填回矩阵
            index = 0
            i_ = x
            j_ = y
            while i_ < m and j_ < n:
                mat[i_][j_] = diagonal_number[index]
                index += 1
                i_ += 1
                j_ += 1
            return mat

        diagonals = []
        # 将第一行和第一列所有坐标都计入对角线起点列表diagonals中
        for p in range(n):
            diagonals.append((0, p))
        for q in range(1, m):
            diagonals.append((q, 0))

        # 遍历每一条对角线
        for diag in diagonals:
            diagonal(diag[0], diag[1], mat)

        return mat

提交通过:

相关推荐
小码的头发丝、21 分钟前
Django中ListView 和 DetailView类的区别
数据库·python·django
~yY…s<#>1 小时前
【刷题17】最小栈、栈的压入弹出、逆波兰表达式
c语言·数据结构·c++·算法·leetcode
Chef_Chen1 小时前
从0开始机器学习--Day17--神经网络反向传播作业
python·神经网络·机器学习
千澜空1 小时前
celery在django项目中实现并发任务和定时任务
python·django·celery·定时任务·异步任务
斯凯利.瑞恩2 小时前
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户附数据代码
python·决策树·随机森林
yannan201903132 小时前
【算法】(Python)动态规划
python·算法·动态规划
linsa_pursuer2 小时前
快乐数算法
算法·leetcode·职场和发展
XuanRanDev2 小时前
【每日一题】LeetCode - 三数之和
数据结构·算法·leetcode·1024程序员节
蒙娜丽宁2 小时前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉
代码猪猪傻瓜coding2 小时前
力扣1 两数之和
数据结构·算法·leetcode