Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Ma trận xoắn ốc II trong Python


Giả sử chúng ta có một số nguyên dương n, chúng ta phải tạo một ma trận vuông với n^2 phần tử theo thứ tự xoắn ốc. Ví dụ, nếu n = 4, ma trận sẽ là:

1234
1213145
1116156
10987

Các bước thực hiện

  • Thiết lập (row1, col1) := (0, 0) và (row2, col2) := (n, n), tạo ma trận res điền bằng 0, đặt num := 1.
  • Khi num <= n^2:
    • Với i từ col1 đến col2 - 1: gán res[row1][i] = num, tăng num. Nếu num > n^2 thì dừng.
    • Với i từ row1 + 1 đến row2 - 1: gán res[i][col2-1] = num, tăng num. Nếu num > n^2 thì dừng.
    • Với i từ col2 - 2 giảm xuống col1: gán res[row2-1][i] = num, tăng num. Nếu num > n^2 thì dừng.
    • Với i từ row2 - 2 giảm xuống row1 + 1: gán res[i][col1] = num, tăng num.
    • Tăng row1, giảm row2, tăng col1, giảm col2.
  • Trả về res.

Ví dụ minh họa

class Solution(object):
    def generateMatrix(self, n):
        row1 = 0
        col1 = 0
        row2 = n
        col2 = n
        result = [[0 for i in range(n)] for j in range(n)]
        num = 1
        while num <= n**2:
            for i in range(col1, col2):
                result[row1][i] = num
                num += 1
            if num > n**2:
                break
            for i in range(row1+1, row2):
                result[i][col2-1] = num
                num += 1
            if num > n**2:
                break
            for i in range(col2-2, col1-1, -1):
                result[row2-1][i] = num
                num += 1
            if num > n**2:
                break
            for i in range(row2-2, row1, -1):
                result[i][col1] = num
                num += 1
            row1 += 1
            row2 -= 1
            col1 += 1
            col2 -= 1
        return result

ob1 = Solution()
print(ob1.generateMatrix(4))

Đầu vào

4

Đầu ra

[[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]