এক সেট টাইল আছে, প্রতিটি টাইলে একটি অক্ষর tiles[i] প্রিন্ট করা আছে। খালি না হয় এমন অক্ষর সিকোয়েন্সের সংখ্যা বের করতে হবে যা তৈরি করা সম্ভব।
ইনপুট "AAB" হলে আউটপুট 8। সিকোয়েন্সগুলো: "A", "B", "AA", "AB", "BA", "AAB", "ABA", "BAA"।
সমাধানের ধাপসমূহ
- dfs() ফাংশন ডিফাইন করুন যা count নেয়
- sum := 0
- 1 থেকে 26 পর্যন্ত লুপ:
- যদি count[i] == 0 হয়, তবে কন্টিনিউ
- count[i]--, sum++
- sum += dfs(count)
- count[i]++
- sum রিটার্ন
- মূল মেথড:
- 26 সাইজের count অ্যারে 0 দিয়ে ফিল করুন
- tiles এর প্রতিটি i-এর জন্য count[ord(i) - ord('A') + 1]++
- dfs(count) রিটার্ন
উদাহরণ
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