diff --git a/work/1/Medium/Array/48.rotate-image.py b/work/1/Medium/Array/48.rotate-image.py new file mode 100644 index 0000000..419e4dd --- /dev/null +++ b/work/1/Medium/Array/48.rotate-image.py @@ -0,0 +1,47 @@ +""" +48. Rotate Image +Difficulty: Medium +https://leetcode.com/problems/rotate-image/ + +────────────────────────────────────────────────── + +You are given an n x n 2D matrix representing an image, rotate the +image by 90 degrees (clockwise). + +You have to rotate the image in-place, which means you have to modify +the input 2D matrix directly. DO NOT allocate another 2D matrix and do +the rotation. + + + +Example 1: + +Input: matrix = [[1,2,3],[4,5,6],[7,8,9]] +Output: [[7,4,1],[8,5,2],[9,6,3]] + +Example 2: + +Input: matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]] +Output: [[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]] + + + +Constraints: + + • n == matrix.length == matrix[i].length + + • 1 <= n <= 20 + + • -1000 <= matrix[i][j] <= 1000 +""" + + +class Solution: + def rotate(self, matrix: List[List[int]]) -> None: + n = len(matrix) + for r in range(n): + for c in range(r + 1, n): + matrix[r][c], matrix[c][r] = matrix[c][r], matrix[r][c] + + for r in range(n): + matrix[r].reverse() diff --git a/work/1/Medium/Array/54.spiral-matrix.py b/work/1/Medium/Array/54.spiral-matrix.py new file mode 100644 index 0000000..457b65f --- /dev/null +++ b/work/1/Medium/Array/54.spiral-matrix.py @@ -0,0 +1,66 @@ +""" +54. Spiral Matrix +Difficulty: Medium +https://leetcode.com/problems/spiral-matrix/ + +────────────────────────────────────────────────── + +Given an m x n matrix, return all elements of the matrix in spiral +order. + + + +Example 1: + +Input: matrix = [[1,2,3],[4,5,6],[7,8,9]] +Output: [1,2,3,6,9,8,7,4,5] + +Example 2: + +Input: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] +Output: [1,2,3,4,8,12,11,10,9,5,6,7] + + + +Constraints: + + • m == matrix.length + + • n == matrix[i].length + + • 1 <= m, n <= 10 + + • -100 <= matrix[i][j] <= 100 +""" + + +class Solution: + def spiralOrder(self, matrix: List[List[int]]) -> List[int]: + res = [] + top, bottom = 0, len(matrix) - 1 + left, right = 0, len(matrix[0]) - 1 + + while top <= bottom and left <= right: + # 1. Top Row + for c in range(left, right + 1): + res.append(matrix[top][c]) + top += 1 + + # 2. Right Column + for r in range(top, bottom + 1): + res.append(matrix[r][right]) + right -= 1 + + # 3. Bottom Row + if top <= bottom: + for c in range(right, left - 1, -1): + res.append(matrix[bottom][c]) + bottom -= 1 + + # 4. Left Column + if left <= right: + for r in range(bottom, top - 1, -1): + res.append(matrix[r][left]) + left += 1 + + return res