สมมติว่าเรามีตัวเลข n เราต้องสร้างพจน์ที่ n ในลำดับ "Look and Say" นี่คือลำดับที่มีคำศัพท์ไม่กี่คำด้านล่าง -
- 1
- 11
- 21
- 1211
- 111221
สตริงจะถูกอ่านเช่น
- 1 (หนึ่ง)
- 11 (หนึ่ง 1) อ่าน 1 ก่อนหน้าแล้วพูดว่า "หนึ่ง 1"
- 21 (สอง 1) ดังนั้น อ่าน 11 ก่อนหน้าแล้วพูดว่า "สอง 1"
- 1211 (หนึ่ง 2 ต่อ 1) อ่าน 21 อันที่แล้วแล้วพูดว่า "หนึ่ง 2 หนึ่ง 1"
- 111221 (หนึ่ง 1 1 2 2 1) อ่าน 1211 ก่อนหน้าแล้วพูดว่า "หนึ่ง 1 หนึ่ง 2 สอง 1"
สมมติว่าเรามีตัวเลข n, 1 <=n <=30 จากนั้นเราต้องสร้างเทอมที่ n เพื่อแก้ปัญหานี้ เราจะปฏิบัติตามแนวทางนี้ -
- ตั้งค่า s :=“1”
- ถ้า n =1 ให้คืนค่า s
- สำหรับ i :=2 ถึง n + 1
- j :=0
- temp :=สตริงว่าง
- curr =สตริงว่างและนับ :=0
- ในขณะที่ j <ความยาวของ s ทำ
- ถ้าcurrเป็นสตริงว่าง
- curr :=s[j] นับ :=1 และเพิ่ม j ขึ้น 1
- มิฉะนั้น ถ้า curr คือ s[j] แล้ว
- เพิ่มจำนวนและ j ขึ้น 1
- มิฉะนั้น:
- temp :=temp + นับเป็น string + curr
- curr =สตริงว่าง
- นับ :=0
- ถ้าcurrเป็นสตริงว่าง
- temp :=temp + นับเป็น string + curr
- คืนสินค้า
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution(object): def solve(self, n): s = "1" if n == 1: return s for i in range(2,n+1): j = 0 temp = "" curr = "" count = 0 while j <len(s): if curr =="": curr=s[j] count=1 j+=1 elif curr == s[j]: count+=1 j+=1 else: temp+= str(count) + curr curr="" count = 0 temp+=str(count) + curr s=temp return s ob = Solution() n = 5 print(ob.solve(n))
อินพุต
5
ผลลัพธ์
"111221"