এখানে আমরা Count and Say ক্রম দেখব। এটি একটি ক্রম যার কয়েকটি পদ নিচের মত -
- 1
- 11
- 21
- 1211
- 111221
স্ট্রিংটি এভাবে পড়া হবে
- 1 (এক)
- 11 (এক 1) তাই আগের 1টি পড়ুন এবং বলুন “এক 1”
- 21 (দুই 1) তাই আগের 11টি পড়ুন এবং বলুন “দুই 1”
- 1211 (এক 2 এক 1) তাই আগের 21টি পড়ুন এবং বলুন "এক 2 এক 1"
- 111221 (এক 1 এক 2 দুই 1) তাই আগের 1211 পড়ুন এবং বলুন "এক 1 এক 2 দুই 1"
ধরুন আমাদের একটি সংখ্যা আছে n, 1 <=n <=30, তাহলে আমাদের nth টার্ম তৈরি করতে হবে।
এটি সমাধান করার জন্য, আমরা এই পদ্ধতি অনুসরণ করব -
- সেট s :=“1”
- যদি n =1 হয়, তাহলে s ফেরত দিন
- এর জন্য i :=2 থেকে n + 1
- j :=0, temp :=“”, curr =“” এবং গণনা :=0
- যখন j
- যদি curr "" হয়, তাহলে curr :=s[j], গণনা :=1 এবং j 1 দ্বারা বাড়ান
- অন্যথায় যদি curr s[j] হয়, তাহলে গণনা এবং j 1 দ্বারা বাড়ান
- অন্যথায় temp :=temp + স্ট্রিং হিসাবে গণনা করুন + curr, curr =“”, গণনা :=0
- temp :=temp + স্ট্রিং + 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