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

ตรวจสอบว่าแถวของเมทริกซ์ทั้งหมดหมุนเป็นวงกลมซึ่งกันและกันใน Python . หรือไม่


สมมติว่าเราได้รับเมทริกซ์ขนาด n*n ซึ่งประกอบด้วยตัวเลขจำนวนเต็ม เราต้องค้นหาว่าแถวทั้งหมดของเมทริกซ์นั้นเป็นการหมุนแบบวงกลมของแถวก่อนหน้าหรือไม่ กรณีแถวแรกควรหมุนเป็นวงกลมของแถวที่ n

ดังนั้นหากอินพุตเป็นแบบ

B A D C
A D
C A
D C

แล้วผลลัพธ์จะเป็น True

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • concat :=สตริงว่าง
  • สำหรับ i ในช่วง 0 ถึงจำนวนแถว ทำ
    • concat :=concat ต่อ "-" concatenate matrix[0,i]
  • concat :=concat concatenate concat
  • สำหรับฉันในช่วง 1 ถึงขนาดของเมทริกซ์ ทำ
    • curr_row :=สตริงว่าง
    • สำหรับ j ในช่วง 0 ถึงจำนวนคอลัมน์ ให้ทำ
      • curr_row :=curr_row ต่อ "-" เมทริกซ์ต่อกัน[i,j]
    • ถ้า curr_row มีอยู่ในสตริง concat แล้ว
      • คืนค่า True
  • คืนค่าเท็จ

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

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))

อินพุต

[['B', 'A', 'D', 'C'],
['C', 'B', 'A', 'D'],
['D', 'C', 'B', 'A'],
['A', 'D', 'C', 'B']]

ผลลัพธ์

True