Menu
CoddyTech

Spiral Matrix

Bạn được cung cấp một ma trận số nguyên có m hàng và n cột, dưới dạng danh sách các hàng. Hãy trả về tất cả giá trị của ma trận theo thứ tự xoắn ốc.

Bắt đầu từ góc trên bên trái, đi sang phải dọc theo hàng trên cùng, sau đó đi xuống theo cột bên phải, sang trái dọc theo hàng dưới cùng rồi đi lên theo cột bên trái. Tiếp tục đi vòng vào trong theo chiều kim đồng hồ cho đến khi đọc mỗi giá trị đúng một lần.

Hàm

spiralOrder(matrix: integer-2d-array) → integer-array
matrixinteger-2d-array
lưới số nguyên, dưới dạng danh sách (list) các hàng có độ dài bằng nhau
Trả vềinteger-array
mọi giá trị của ma trận theo thứ tự xoắn ốc theo chiều kim đồng hồ, bắt đầu từ góc trên bên trái

Ràng buộc

  • 1 ≤ m, n ≤ 80, trong đó m = matrix.length và n = matrix[i].length
  • Mỗi hàng có cùng độ dài n.
  • -100 ≤ matrix[i][j] ≤ 100

Ví dụ

Đầu vào
matrix = [[1, 2, 3], [10, 11, 4], [9, 12, 5], [8, 7, 6]]
Đầu ra
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Giải thích
Các giá trị tăng dần theo đường xoắn ốc. Vòng ngoài hiển thị từ 1 đến 10, còn lớp bên trong là một cột duy nhất, đọc một lần: 11, 12.
challenge icon

Câu hỏi mở rộng

Bạn có thể trả về các giá trị theo thứ tự ngược chiều kim đồng hồ, bắt đầu từ góc trên bên trái rồi đi xuống cột bên trái trước không?

Đặt lại code
def spiralOrder(matrix):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

matrix = [[1, 2, 3], [10, 11, 4], [9, 12, 5], [8, 7, 6]]

Đầu ra mong đợi

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]