यहां हम काउंट एंड साय सीक्वेंस देखेंगे। यह एक क्रम है जिसके कुछ पद नीचे दिए गए हैं -
- 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 है, तो हमें nवाँ पद उत्पन्न करना होगा।
इसे हल करने के लिए, हम इस दृष्टिकोण का पालन करेंगे -
- सेट सेट :="1"
- अगर n =1 है, तो s वापस करें
- i के लिए:=2 से n + 1
- j :=0, अस्थायी :="", curr ="" और गिनती :=0
- जबकि j
- अगर curr "" है, तो curr :=s[j], गिनें :=1 और j को 1 से बढ़ा दें
- और अगर curr s[j] है, तो गिनती और j को 1 से बढ़ा दें
- अन्यथा अस्थायी:=अस्थायी + स्ट्रिंग के रूप में गिनती + curr, curr ="", गिनती:=0
- अस्थायी:=अस्थायी + स्ट्रिंग के रूप में गिनती + 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