mirror of
https://github.com/prdlk/leetcode.git
synced 2026-09-16 23:16:26 +00:00
feat(work): add Rotate Image and Spiral Matrix solutions
This commit is contained in:
@@ -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()
|
||||||
@@ -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
|
||||||
Reference in New Issue
Block a user