हमें एक संख्या दी गई है जिसमें कई दोहराए गए अंक हैं, स्ट्रिंग के रूप में। लक्ष्य है इसे स्पेल (उच्चारण) करने के तरीकों की संख्या ज्ञात करना। उदाहरण के लिए 112233 को "डबल वन, डबल टू, डबल थ्री" या "वन वन टू टू थ्री थ्री" के रूप में स्पेल किया जा सकता है।
हम लगातार अंकों की जांच करके करते हैं। यदि संख्या "13" है तो केवल एक तरीका है "वन थ्री"। यदि "113" है तो तरीके हैं "डबल वन थ्री", "वन वन थ्री"।
दृष्टिकोण: प्रत्येक लगातार अंक समूह के लिए, यदि उसकी लंबाई k है, तो उसे स्पेल करने के 2^(k-1) तरीके हैं। सभी समूहों के तरीकों को गुणा करें।
इनपुट - num = "11211"
आउटपुट - दोहराए गए अंकों वाली संख्या को स्पेल करने के तरीके: 4
उपयोग किया गया दृष्टिकोण
- स्ट्रिंग को पार करें।
- लगातार समान अंकों की गिनती
tempकरें। count *= 2^(temp-1)- अंत में काउंट वापस करें।
उदाहरण (C++ कोड)
#include <bits/stdc++.h>
using namespace std;
long long word_spell(string str) {
long long count = 1;
int len = str.length();
for (int i = 0; i < len; i++) {
int temp = 1;
while (i < len-1 && str[i+1] == str[i]) {
temp++;
i++;
}
count *= (1LL << (temp - 1)); // pow(2, temp-1)
}
return count;
}
int main() {
string str = "222211";
cout << "Count of ways to spell a number with repeated digits are: " << word_spell(str);
return 0;
} आउटपुट
Count of ways to spell a number with repeated digits are: 16