मान लीजिए हमारे पास दो पूर्णांक n और k हैं। हमें 1 ... n में से k संख्याओं के सभी संभावित संयोजन ढूंढने हैं। इसलिए यदि n = 4 और k = 2, तो संयोजन [[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]] होंगे।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- हम इसे हल करने के लिए पुनरावर्ती फ़ंक्शन का उपयोग करेंगे। solve() फ़ंक्शन n, k, temp सरणी और start ले रहा है। start प्रारंभ में 1 है। यह इस तरह कार्य करेगा
- यदि temp सरणी का आकार = k, तो temp को res सरणी में डालें, और वापस लौटें
- i := start से n तक
- i को temp में डालें
- solve(n, k, temp, i + 1)
- temp के अंत से एक तत्व हटाएं
- solve फ़ंक्शन को solve(n, k, []) जैसे कॉल करें
- res लौटाएं
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -
#includeusing namespace std; void print_vector(vector > v){ cout << "["; for(int i = 0; i > res; void solve(int n, int k, vector temp, int start = 1){ if(temp.size() == k){ res.push_back(temp); return; } for(int i = start; i <= n; i++){ temp.push_back(i); solve(n, k, temp, i + 1); temp.pop_back(); } } vector > combine(int n, int k) { res.clear(); vector temp; solve(n ,k, temp); return res; } }; main(){ Solution ob; print_vector(ob.combine(5,3)); }
इनपुट
5 3
आउटपुट
[[1,2,3],[1,2,4],[1,2,5],[1,3,4],[1,3,5],[1,4,5],[2,3,4],[2,3,5],[2,4,5],[3,4,5]]