มีสตริง s และ k เขียนตัวอักษรทแยงลงมาจนถึงบรรทัด k แล้วทแยงขึ้น จนครบ สร้างสตริงใหม่จากการอ่านแต่ละบรรทัด
เช่น s="ilovepythonprogramming", k=5 ให้รูปแบบ zigzag ตามภาพ
ขั้นตอนการแก้ปัญหา
line := dictเก็บ (ตัวอักษร, ตำแหน่ง) ต่อบรรทัดcnt=0, delta=1ควบคุมทิศทางขึ้นลง- วนอ่าน s: ใส่ใน line[cnt], อัปเดต cnt, เปลี่ยน delta ที่ขอบ
- สร้างแต่ละบรรทัด: ใส่ตัวอักษรในตำแหน่งเดิม ที่เหลือเว้นวรรค
- รวมบรรทัดด้วย newline
ตัวอย่างโค้ด
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
เอาต์พุต
