<p>A <strong>matrix diagonal</strong> 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&#39;s end. For example, the <strong>matrix diagonal</strong> starting from <code>mat[2][0]</code>, where <code>mat</code> is a <code>6 x 3</code> matrix, includes cells <code>mat[2][0]</code>, <code>mat[3][1]</code>, and <code>mat[4][2]</code>.</p>

<p>Given an <code>m x n</code> matrix <code>mat</code> of integers, sort each <strong>matrix diagonal</strong> in ascending order and return <em>the resulting matrix</em>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2020/01/21/1482_example_1_2.png" style="width: 500px; height: 198px;" />
<pre>
<strong>Input:</strong> mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]]
<strong>Output:</strong> [[1,1,1,1],[1,2,2,2],[1,2,3,3]]
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> 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]]
<strong>Output:</strong> [[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]]
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>m == mat.length</code></li>
	<li><code>n == mat[i].length</code></li>
	<li><code>1 &lt;= m, n &lt;= 100</code></li>
	<li><code>1 &lt;= mat[i][j] &lt;= 100</code></li>
</ul>

class Solution:
    def diagonalSort(self, mat: List[List[int]]) -> List[List[int]]:
        ROWS, COLS = len(mat), len(mat[0])

        # Going up
        for up in range(ROWS - 1, -1, -1):
            temp = []
            row = up
            col = 0
            # First pass
            while 0 <= row < ROWS and 0 <= col < COLS:
                temp.append(mat[row][col])
                row += 1
                col += 1

            temp.sort()
            row = up
            col = 0
            i = 0
            # Second pass
            while 0 <= row < ROWS and 0 <= col < COLS:
                mat[row][col] = temp[i]
                row += 1
                col += 1
                i += 1

        # Going across
        for right in range(1, COLS):
            temp = []
            row = 0
            col = right
            # First pass
            while 0 <= row < ROWS and 0 <= col < COLS:
                temp.append(mat[row][col])
                row += 1
                col += 1

            temp.sort()
            row = 0
            col = right
            i = 0
            # Second pass
            while 0 <= row < ROWS and 0 <= col < COLS:
                mat[row][col] = temp[i]
                row += 1
                col += 1
                i += 1
        
        return mat

17000