मान लीजिए कि हमारे पास दो पूर्णांक n और k हैं। हमें 1 ... n में से k संख्याओं के सभी संभावित संयोजनों को खोजना है। तो अगर n =4 और k =2, तो संयोजन [[1,2], [1,3], [1,4], [2,3], [2,4], [3,4 होंगे। ]]
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- हम इसे हल करने के लिए पुनरावर्ती फ़ंक्शन का उपयोग करेंगे। फ़ंक्शन हल () n, k, अस्थायी सरणी और प्रारंभ ले रहा है। प्रारंभ प्रारंभ में है 1. यह इस प्रकार कार्य करेगा
- यदि अस्थायी सरणी का आकार =k है, तो अस्थायी को रेस सरणी में डालें, और वापस लौटें
- i के लिए:=n से प्रारंभ करें,
- अस्थायी में i डालें
- समाधान (n, k, अस्थायी, i + 1)
- अस्थायी के अंत से एक तत्व निकालें
- हल फ़ंक्शन को कॉल करें जैसे हल करें(n, k, [])
- रिटर्न रेस
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; void print_vector(vector<vector<int> > v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << "["; for(int j = 0; j <v[i].size(); j++){ cout << v[i][j] << ", "; } cout << "],"; } cout << "]"<<endl; } class Solution { public: vector < vector <int> > res; void solve(int n, int k, vector <int> 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<vector<int> > combine(int n, int k) { res.clear(); vector <int> 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]]