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

โปรแกรมพิมพ์องค์ประกอบเมทริกซ์ในลำดับเกลียวใน python


สมมติว่าเรามีแผ่นเมทริกซ์ 2 มิติ เราต้องพิมพ์องค์ประกอบเมทริกซ์ในลักษณะเกลียว ในตอนแรกเริ่มจากแถวแรก (mat[0, 0]) ให้พิมพ์เนื้อหาทั้งหมดแล้วตามด้วยคอลัมน์สุดท้ายเพื่อพิมพ์ จากนั้นจึงพิมพ์แถวสุดท้าย จากนั้นจึงพิมพ์องค์ประกอบในลักษณะเกลียว

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

7
10
9
2
9
1
6
2
3
9
1
4
2
7
5
9
9
11

จากนั้นผลลัพธ์จะเป็น [7, 10, 9, 1, 3, 4, 5, 11, 9, 9, 2, 9, 6, 2, 9, 2, 1, 7]

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

  • d :=0
  • บน :=0, ลง :=จำนวนแถวของเมทริกซ์ – 1, ซ้าย :=0, ขวา :=จำนวนคอลัมน์ของเมทริกซ์ - 1
  • ค :=0
  • res :=รายการใหม่
  • ทิศทาง :=0
  • ขณะบน <=ลงและซ้าย <=ขวา ทำ
    • ถ้าทิศทางเหมือนกับ 0 แล้ว
      • สำหรับฉันอยู่ในช่วงจากซ้ายไปขวา + 1 ทำ
        • แทรกเมทริกซ์[top, i] ลงใน res
      • top :=top + 1
    • ถ้าทิศทางเหมือนกับ 1 แล้ว
      • สำหรับฉันอยู่ในช่วงบนลงล่าง + 1 ทำ
        • แทรกเมทริกซ์[i, ขวา] ลงใน res
      • ขวา :=ขวา - 1
    • ถ้าทิศทางเหมือนกับ 2 แล้ว
      • สำหรับ i ในช่วงจากขวาไปซ้าย - 1 ลดลง 1 ทำ
        • แทรกเมทริกซ์[ลง, i] ลงในความละเอียด
      • ลง :=ลง - 1
    • ถ้าทิศทางเหมือนกับ 3 แล้ว
      • สำหรับ i อยู่ในช่วงลงไปด้านบน - 1, ลดลง 1, ทำ
        • แทรกเมทริกซ์[i, ซ้าย] ลงใน res
      • ซ้าย :=ซ้าย + 1
  • ทิศทาง :=(ทิศทาง + 1) mod 4
  • ผลตอบแทน

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

ตัวอย่าง

คลาสโซลูชัน:def แก้(ตัวเอง, เมทริกซ์):d =0 บน =0 ลง =len(เมทริกซ์) - 1 ซ้าย =0 ขวา =len(เมทริกซ์[0]) - 1 c =0 res =[] ทิศทาง =0 ในขณะที่ด้านบน <=ลงและซ้าย <=ขวา:ถ้าทิศทาง ==0:สำหรับฉันอยู่ในช่วง (ซ้าย, ขวา + 1):res.append(matrix[top][i]) ด้านบน +=1 ถ้าทิศทาง ==1:สำหรับฉันอยู่ในช่วง (บน, ลง + 1):res.append(เมทริกซ์[i][ขวา]) ขวา -=1 ถ้าทิศทาง ==2:สำหรับฉันอยู่ในช่วง (ขวา, ซ้าย - 1, -1 ):res.append(matrix[down][i]) down -=1 if direction ==3:for i in range(down, top - 1, -1):res.append(matrix[i][left] ) ซ้าย +=1 ทิศทาง =(ทิศทาง + 1) % 4 resob กลับ =โซลูชัน () เมทริกซ์ =[ [7, 10, 9], [2, 9, 1], [6, 2, 3], [9, 1, 4], [2, 7, 5], [9, 9, 11]]print(ob.solve(matrix))

อินพุต

<ก่อนหน้า>[ [7, 10, 9],

[2, 9, 1],

[6, 2, 3],

[9, 1, 4],

[2, 7, 5],

[9, 9, 11]

]

ผลลัพธ์

[7, 10, 9, 1, 3, 4, 5, 11, 9, 9, 2, 9, 6, 2, 9, 2, 1, 7]