สมมติว่าเราได้รับเมทริกซ์ขนาด 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