একটি ক্যান্ডিডেট নম্বর সেট (সব ইউনিক) এবং একটি টার্গেট নম্বর দেওয়া আছে। ক্যান্ডিডেট থেকে নম্বর বেছে নিয়ে (প্রতিটি নম্বর একবারের বেশি ব্যবহার করা যাবে না) টার্গেট সমান করার সব ইউনিক কম্বিনেশন বের করতে হবে।
উদাহরণ: elements=[2,3,6,7,8], target=8 হলে আউটপুট: [[2,6],[8]]।
সমাধান: রিকার্সিভ ব্যাকট্র্যাকিং। solve() ফাংশন ইনডেক্স, অ্যারে, টার্গেট, টেম্প অ্যারে নেয়। টার্গেট ০ হলে temp রেজাল্টে যোগ। ইনডেক্স শেষ হলে বা টার্গেট নেগেটিভ হলে রিটার্ন। অ্যারে সর্ট করে ডুপ্লিকেট এয়েড করায় continue।
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<int> > v){
cout << "[";
for(int i = 0; i idx && a[i] == a[i-1])continue;
temp.push_back(a[i]);
solve(i + 1, a, b - a[i], temp);
temp.pop_back();
}
}
vector<vector<int> > combinationSum2(vector<int> &a, int b) {
res.clear();
vector <int> temp;
solve(0, a, b, temp);
return res;
}
};
main(){
Solution ob;
vector<int> v = {2,3,6,7,8};
print_vector(ob.combinationSum2(v, 10));
}
ইনপুট
[2,3,6,7,8] 8
আউটপুট
[[2, 8, ],[3, 7, ],]