Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีตรวจสอบว่าแถวทั้งหมดของ Matrix เป็น Circular Rotations ของกันใน Python

ปัญหา

กำหนด Matrix n×n ตรวจสอบว่าแถวทุกแถวเป็น Circular Rotation ของแถวก่อนหน้า (แถวแรกเป็น Rotation ของแถวสุดท้าย)

ตัวอย่าง 4×4: B A D C / C B A D / D C B A / A D C B → True

แนวทางแก้ปัญหา

  1. สร้าง String concat จากแถวแรก (คั่นด้วย -)
  2. Duplicate: concat = concat + concat
  3. ตรวจสอบว่า String ของแต่ละแถวถัดไป เป็น Substring ของ concat หรือไม่

ตัวอย่างโค้ด

def solve(matrix):
    concat = ""
    for i in range(len(matrix)):
        concat += "-" + str(matrix[0][i])
    concat += concat  # duplicate

    for i in range(1, len(matrix)):
        curr_row = ""
        for j in range(len(matrix[0])):
            curr_row += "-" + str(matrix[i][j])
        if concat.find(curr_row) == -1:
            return False
    return True

matrix = [['B','A','D','C'],
          ['C','B','A','D'],
          ['D','C','B','A'],
          ['A','D','C','B']]
print(solve(matrix))  # True

อินพุต / เอาต์พุต

Input: [['B','A','D','C'], ['C','B','A','D'], ['D','C','B','A'], ['A','D','C','B']]
Output: True