สมมติว่าเรามีสตริง s และอีกค่าหนึ่งคือ k เราต้องหาสตริงใหม่โดยนำอักขระแต่ละตัวจาก s มาและเริ่มในแนวทแยงมุมจากบนซ้ายไปล่างขวาจนถึงบรรทัดที่ k แล้วขึ้นไปบนขวาเป็นต้น
ดังนั้น หากอินพุตเป็นเหมือน s ="ilovepythonprogramming" k =5 ผลลัพธ์จะเป็น
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:
- line :=แผนที่ใหม่
- cnt :=0
- เดลต้า :=1
- สำหรับแต่ละดัชนี i และอักขระ c ใน s ทำ
- แทรก (c, i) ที่ท้ายบรรทัด[cnt]
- cnt :=cnt + เดลต้า
- ถ้า cnt เหมือนกับ k แล้ว
- เดลต้า :=-1
- cnt :=k - 2
- ถ้า cnt เหมือนกับ 0 แล้ว
- เดลต้า :=1
- ans :=รายการใหม่
- สำหรับแต่ละคีย์ i และค่า c ในบรรทัด ให้ทำ
- prefix :=รายการที่มีขนาดเท่ากับ s และเติมด้วยช่องว่างเดียว
- สำหรับแต่ละคู่ (x, y) ใน c ทำ
- คำนำหน้า[y] :=x
- รวมแต่ละองค์ประกอบที่อยู่ในคำนำหน้าและแทรกลงใน ans
- ส่งคืนสตริงใหม่โดยเพิ่มบรรทัดใหม่ระหว่างแต่ละองค์ประกอบที่ต่อเนื่องกันใน ans
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น:
ตัวอย่าง
from collections import defaultdict class Solution: def solve(self, s, k): line = defaultdict(list) cnt = 0 delta = 1 for i, c in enumerate(s): line[cnt].append((c, i)) cnt += delta if cnt == k: delta = -1 cnt = k - 2 if cnt == 0: delta = 1 ans = [] for i, c in line.items(): prefix = [" "] * (len(s)) for x, y in c: prefix[y] = x ans.append("".join(prefix)) return "\n".join(ans) ob = Solution() s = "ilovepythonprogramming" k = 5 print(ob.solve(s, k))
อินพุต
"ilovepythonprogramming", 5
ผลลัพธ์