ที่นี่เราจะเห็นลำดับการนับและพูด นี่คือลำดับที่มีคำศัพท์ไม่กี่คำด้านล่าง -
- 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
- มิฉะนั้น ถ้าเคอร์r คือ s[j] ให้เพิ่มจำนวนและ j ขึ้น 1
- มิฉะนั้น temp :=temp + นับเป็น string + curr, curr =“”, count :=0
- temp :=temp + นับเป็น string + curr
- คืนสินค้า
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution(object): def countAndSay(self, n): """ :type n: int :rtype: str """ s = "1" if n == 1: return s for i in range(2,n+1): j = 0 temp = "" curr = "" count = 0 while j<len(s): #print(curr,count) if curr =="": #print(curr) curr=s[j] count=1 j+=1 elif curr == s[j]: #print(curr) count+=1 j+=1 else: #print(count,curr) temp+= str(count) + curr curr="" count = 0 #print(temp) temp+=str(count) + curr s=temp return s ob1 = Solution() print(ob1.countAndSay(6))
อินพุต
print(ob1.countAndSay(6))
ผลลัพธ์
312211