মান করুন একটি সংখ্যার সেট আছে; আমাদের সেটটির সব সম্ভাব্য সাবসেট জেনারেট করতে হবে। এটিকে পাওয়ার সেটও বলা হয়। সেট [1,2,3] হলে পাওয়ার সেট হবে [[], [1], [2], [3], [1,2], [1,3], [2,3], [1,2,3]]।
ধাপগুলো (রিকারসিভ ব্যাকট্র্যাকিং):
- রিকারসিভ মেথড
solve(), যা নিবে নম্বরের সেট (nums), টেম্পরারি সেট (temp),resএবংindex solve()ফাংশন নিচের মতো কাজ করবে:- যদি
index == len(nums), তবেtemp-এর কপি বানিয়েres-এ ইনসার্ট করুন এবং রিটার্ন temp[index] := 0solve(nums, temp, res, index + 1)temp[index] := 1solve(nums, temp, res, index + 1)
- যদি
- মেইন ফাংশন:
res := খালি লিস্টtempলিস্টnums-এর সাইজে, ০ দিয়ে ফিল করাsolve(nums, temp, res, 0)কল করুনmain_res := খালি লিস্টtemp_res-এর সব লিস্টের জন্যtemp := খালি লিস্টi০ থেকে লিস্টের দৈর্ঘ্য- যদি
lists[i] == 1, তবেnums[i]temp-এ ইনসার্ট করুন
- যদি
tempmain_res-এ ইনসার্ট করুন
main_resরিটার্ন করুন
নিচে ইমপ্লিমেন্টেশন দেওয়া হলো:
উদাহরণ
class Solution(object):
def subsets(self, nums):
temp_result = []
self.subsets_util(nums, [0 for i in range(len(nums))], temp_result, 0)
main_result = []
for lists in temp_result:
temp = []
for i in range(len(lists)):
if lists[i] == 1:
temp.append(nums[i])
main_result.append(temp)
return main_result
def subsets_util(self, nums, temp, result, index):
if index == len(nums):
result.append([i for i in temp])
return
temp[index] = 0
self.subsets_util(nums, temp, result, index + 1)
temp[index] = 1
self.subsets_util(nums, temp, result, index + 1)
ob1 = Solution()
print(ob1.subsets([1, 2, 3, 4]))
ইনপুট
[1,2,3,4]
আউটপুট
[[], [4], [3], [3, 4], [2], [2, 4], [2, 3], [2, 3, 4], [1], [1, 4], [1, 3], [1, 3, 4], [1, 2], [1, 2, 4], [1, 2, 3], [1, 2, 3, 4]]