LeetCode 0054
About 2 min
0054. Spiral Matrix
- Nhãn: Mảng, Ma trận, Mô phỏng
- Độ khó: Trung bình
Tóm tắt đề bài
Mô tả: Cho một ma trận hai chiều kích thước .
Yêu cầu: Trả về tất cả các phần tử trong ma trận theo thứ tự xoắn ốc theo chiều kim đồng hồ.
Giải thích:
- .
- .
- .
- .
Ví dụ:
- Ví dụ 1:
Đầu vào: matrix = [[1,2,3],[4,5,6],[7,8,9]]
Đầu ra: [1,2,3,6,9,8,7,4,5]
- Ví dụ 2:
Đầu vào: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
Đầu ra: [1,2,3,4,8,12,11,10,9,5,6,7]
Ý tưởng giải quyết
Ý tưởng 1: Mô phỏng
- Sử dụng mảng để lưu trữ kết quả. Định nghĩa các biên trên, dưới, trái, phải.
- Tiếp theo, theo thứ tự ngược chiều kim đồng hồ, truy cập các phần tử từ biên.
- Khi hoàn thành việc truy cập biên hiện tại, cần cập nhật lại vị trí biên, thu hẹp phạm vi để tiện cho việc truy cập lần tiếp theo.
- Cuối cùng, trả về mảng kết quả .
Ý tưởng 1: Code
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
up, down, left, right = 0, len(matrix)-1, 0, len(matrix[0])-1
ans = []
while True:
for i in range(left, right + 1):
ans.append(matrix[up][i])
up += 1
if up > down:
break
for i in range(up, down + 1):
ans.append(matrix[i][right])
right -= 1
if right < left:
break
for i in range(right, left - 1, -1):
ans.append(matrix[down][i])
down -= 1
if down < up:
break
for i in range(down, up - 1, -1):
ans.append(matrix[i][left])
left += 1
if left > right:
break
return ans
Ý tưởng 1: Độ phức tạp
- Độ phức tạp thời gian: . Trong đó và lần lượt là số hàng và số cột của ma trận hai chiều.
- Độ phức tạp không gian: . Nếu tính cả không gian sử dụng cho mảng kết quả, thì độ phức tạp không gian là . Nếu không tính, thì độ phức tạp không gian là .