สมมติว่าเรามีแผ่นเมทริกซ์ 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 แล้ว
- สำหรับฉันอยู่ในช่วงบนลงล่าง + 1 ทำ
- แทรกเมทริกซ์[i, ขวา] ลงใน res
- ขวา :=ขวา - 1
- สำหรับฉันอยู่ในช่วงบนลงล่าง + 1 ทำ
- ถ้าทิศทางเหมือนกับ 2 แล้ว
- สำหรับ i ในช่วงจากขวาไปซ้าย - 1 ลดลง 1 ทำ
- แทรกเมทริกซ์[ลง, i] ลงในความละเอียด
- ลง :=ลง - 1
- สำหรับ i ในช่วงจากขวาไปซ้าย - 1 ลดลง 1 ทำ
- ถ้าทิศทางเหมือนกับ 3 แล้ว
- สำหรับ i อยู่ในช่วงลงไปด้านบน - 1, ลดลง 1, ทำ
- แทรกเมทริกซ์[i, ซ้าย] ลงใน res
- ซ้าย :=ซ้าย + 1
- สำหรับ i อยู่ในช่วงลงไปด้านบน - 1, ลดลง 1, ทำ
- ถ้าทิศทางเหมือนกับ 0 แล้ว
- ทิศทาง :=(ทิศทาง + 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]