Giả sử, chúng ta được cung cấp một ma trận có kích thước n * n, chứa các số nguyên. Chúng ta phải tìm xem tất cả các hàng của ma trận đó có phải là phép quay tròn của hàng trước đó hay không. Trong trường hợp hàng đầu tiên, nó phải là một vòng quay của hàng thứ n.
Vì vậy, nếu đầu vào giống như
B | A | D | C |
C | B | A | D |
D | C | B | A |
A | D | C | B |
thì đầu ra sẽ là True.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- concat:=chuỗi trống
- đối với tôi trong phạm vi từ 0 đến số hàng, hãy thực hiện
- concat:=concat concatenate "-" ma trận nối [0, i]
- concat:=concat concat concatnate concat
- đối với tôi trong phạm vi từ 1 đến kích thước của ma trận, hãy thực hiện
- curr_row:=chuỗi trống
- đối với j trong phạm vi 0 đến số cột, thực hiện
- curr_row:=curr_row concatenate "-" ma trận nối [i, j]
- nếu curr_row có mặt trong chuỗi kết hợp, thì
- trả về True
- trả về Sai
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
def solve(matrix) : concat = "" for i in range(len(matrix)) : concat = concat + "-" + str(matrix[0][i]) concat = concat + concat for i in range(1, len(matrix)) : curr_row = "" for j in range(len(matrix[0])) : curr_row = curr_row + "-" + str(matrix[i][j]) if (concat.find(curr_row)) : return True return False matrix = [['B', 'A', 'D', 'C'], ['C', 'B', 'A', 'D'], ['D', 'C', 'B', 'A'], ['A', 'D', 'C', 'B']] print(solve(matrix))
Đầu vào
[['B', 'A', 'D', 'C'], ['C', 'B', 'A', 'D'], ['D', 'C', 'B', 'A'], ['A', 'D', 'C', 'B']]
Đầu ra
True