मान लीजिए कि हमारे पास टाइलों का एक सेट है, जहां प्रत्येक टाइल पर एक अक्षर वाली टाइलें [i] मुद्रित हैं। अक्षरों के संभावित गैर-रिक्त अनुक्रमों की संख्या ज्ञात कीजिए जो हम बना सकते हैं। तो यदि इनपुट "एएबी" है, तो आउटपुट 8 होगा। अनुक्रम "ए", "बी", "एए", "एबी", "बीए", "एएबी", "एबीए", "बीएए" हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक dfs() परिभाषित करें, जो गिनती करेगा
- योग :=0
- 1 से 26 के बीच के लिए
- अगर गिनती [i] =0 है, तो बाकी की जांच किए बिना अगले पुनरावृत्ति के लिए जाएं
- गिनती घटाएं[i] 1 से, और योग 1 से बढ़ाएं
- योग :=योग + dfs(गिनती)
- गिनती बढ़ाएं[i] 1 से
- वापसी राशि
- वास्तविक विधि इस प्रकार होगी -
- 26 आकार की एक गिनती सरणी बनाएं, और इसे 0 से भरें
- टाइल्स में प्रत्येक तत्व के लिए
- गिनती बढ़ाएं[i - 'A' + 1] 1 से
- वापसी dfs(गिनती)
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution(object): def numTilePossibilities(self, tiles): count = [0 for i in range(27)] for i in tiles: count[ord(i)-ord('A')+1]+=1 return self.dfs(count) def dfs(self,count): summ = 0 for i in range(1,27): if count[i]==0: continue count[i]-=1 summ+=1 summ+=self.dfs(count) count[i]+=1 return summ ob = Solution() print(ob.numTilePossibilities("AAB"))
इनपुट
"AAB"
आउटपुट
8