ধরুন আমাদের কাছে প্রার্থী সংখ্যার একটি সেট (সমস্ত উপাদান অনন্য) এবং একটি লক্ষ্য সংখ্যা রয়েছে। আমাদের প্রার্থীদের মধ্যে সমস্ত অনন্য সমন্বয় খুঁজে বের করতে হবে যেখানে প্রার্থীর সংখ্যা প্রদত্ত লক্ষ্যের যোগফল। একই পুনরাবৃত্তি নম্বর প্রার্থীদের থেকে সীমাহীন সংখ্যক বার বেছে নেওয়া যেতে পারে। সুতরাং যদি উপাদানগুলি হয় [2,3,6,7] এবং লক্ষ্য মান 7 হয়, তাহলে সম্ভাব্য আউটপুট হবে [[7], [2,2,3]]
আসুন ধাপগুলো দেখি -
-
আমরা পুনরাবৃত্ত পদ্ধতিতে এটি সমাধান করব। রিকার্সিভ ফাংশনটির নাম দেওয়া হয়েছে solve()। এটি ফলাফল সংরক্ষণ করার জন্য একটি অ্যারে, রেকর্ড রাখার জন্য একটি মানচিত্র, লক্ষ্য মান এবং স্বতন্ত্র উপাদানগুলির একটি তালিকা নেয়। প্রাথমিকভাবে রেস অ্যারে এবং মানচিত্র খালি। সমাধান পদ্ধতি নিচের মত কাজ করবে -
- যদি লক্ষ্য 0 হয়, তাহলে
- temp :=তালিকায় উপস্থিত উপাদানগুলির একটি তালিকা
- temp1 :=temp, তারপর বাছাই temp
- যদি temp ম্যাপে না থাকে, তাহলে ম্যাপে temp ঢোকান এবং মান 1 হিসাবে সেট করুন, res-এ temp সন্নিবেশ করুন
- প্রত্যাবর্তন
- যদি temp <0 হয়, তাহলে ফেরত দিন
- এলিমেন্ট তালিকার দৈর্ঘ্য i থেকে x এর জন্য,
- কারেন্টে উপাদানগুলি [x] সন্নিবেশ করান
- সমাধান (উপাদান, লক্ষ্য – উপাদান[x], res, মানচিত্র, i, বর্তমান)
- সূচক থেকে বর্তমান তালিকা থেকে উপাদান মুছুন (কারেন্টের দৈর্ঘ্য - 1)
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class Solution(object):
def combinationSum(self, candidates, target):
result = []
unique={}
candidates = list(set(candidates))
self.solve(candidates,target,result,unique)
return result
def solve(self,candidates,target,result,unique,i = 0,current=[]):
if target == 0:
temp = [i for i in current]
temp1 = temp
temp.sort()
temp = tuple(temp)
if temp not in unique:
unique[temp] = 1
result.append(temp1)
return
if target <0:
return
for x in range(i,len(candidates)):
current.append(candidates[x])
self.solve(candidates,target-candidates[x],result,unique,i,current)
current.pop(len(current)-1)
ob1 = Solution()
print(ob1.combinationSum([2,3,6,7,8],10)) ইনপুট
[2,3,6,7,8] 10
আউটপুট
[[2, 8], [2, 2, 2, 2, 2], [2, 2, 3, 3], [2, 2, 6], [3, 7]]