สมมติว่าเรามีตัวเลข n เราไม่พบค่าที่ n จากลำดับ ลำดับคือด้านล่าง −
- xxxy
- xxxxxy
- yxxxxx
- xyyxyy
- xyyxyyxyyxyyyxyy
- ...
ในการสร้างค่าถัดไป เราต้องปฏิบัติตามกฎเหล่านี้ โดยเริ่มจาก xxy เป็นเทอมแรก −
-
เมื่อเราอยู่ที่จุดเริ่มต้นของรูปแบบ ให้เพิ่มเป็นสองเท่า (เชื่อมสตริงกับตัวมันเอง)
-
เมื่อการทำงานครั้งสุดท้ายเพิ่มขึ้นเป็นสองเท่า ให้ย้อนกลับ
-
เมื่อการดำเนินการครั้งล่าสุดย้อนกลับ ให้แลกเปลี่ยน xs ทั้งหมดกับ ys และในทางกลับกัน
-
ทำซ้ำขั้นตอนเหล่านี้
ดังนั้น หากอินพุตเท่ากับ n =5 เอาต์พุตจะเป็น "yyxyyxyyxyyx"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ผม :=0
- ret :="xxxy"
- ในขณะที่ฉัน
- ถ้าฉัน mod 3 เหมือนกับ 0 แล้ว
- ret :=ret + ret
- มิฉะนั้นเมื่อฉัน mod 3 เหมือนกับ 1 แล้ว
- ret :=subarray ของ ret จากดัชนี 0 ถึง end-1
- มิฉะนั้น
- new_stringy :=สตริงว่าง
- สำหรับแต่ละ c ใน ret ให้ทำ
- ถ้า c เหมือนกับ "x" แล้ว
- new_stringy :=new_stringy ต่อ "y"
- มิฉะนั้น
- new_stringy :=new_stringy ต่อ "x"
- ถ้า c เหมือนกับ "x" แล้ว
- ret :=new_stringy
- ผม :=ผม + 1
- ถ้าฉัน mod 3 เหมือนกับ 0 แล้ว
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, s): i = 0 ret = "xxy" while i < s: if i % 3 == 0: ret += ret elif i % 3 == 1: ret = ret[::-1] else: new_stringy = "" for c in ret: if c == "x": new_stringy += "y" else: new_stringy += "x" ret = new_stringy i += 1 return ret ob = Solution() print(ob.solve(5))
อินพุต
5
ผลลัพธ์
yyxyyxyyxyyx