मान लीजिए कि हमारे पास एक स्ट्रिंग है जिसमें केवल 0 से 9 तक के अंक हैं। और एक लक्ष्य मान दिया गया है। लक्ष्य मान प्राप्त करने के लिए हमें बाइनरी ऑपरेटरों +, - और * को अंकों में जोड़ने के लिए सभी संभावनाओं को वापस करना होगा। तो अगर इनपुट "232" जैसा है और लक्ष्य 8 है, तो उत्तर होगा ["2*3+2", "2+3*2"]
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
हल () नामक एक विधि को परिभाषित करें, यह अनुक्रमणिका, एस, वक्र, लक्ष्य, अस्थायी, बहु-
लेगा -
अगर idx>=s का आकार, तो,
-
यदि लक्ष्य कर्व के समान है, तो,
-
रिट के अंत में अस्थायी डालें
-
-
वापसी
-
-
औक्स:=खाली स्ट्रिंग
-
i :=idx को इनिशियलाइज़ करने के लिए, जब i
-
ऑक्स =ऑक्स + एस[i]
-
यदि aux[0] '0' के समान है और aux> 1 का आकार है, तो,
-
अगले पुनरावृत्ति पर जाएं, निम्नलिखित भाग पर ध्यान न दें
-
-
अगर idx 0 के समान है, तो,
-
कॉल हल करें (i + 1, s, aux पूर्णांक के रूप में, लक्ष्य, aux, aux पूर्णांक के रूप में)
-
-
अन्यथा
-
कॉल सॉल्व (i + 1, s, curr + aux पूर्णांक के रूप में, लक्ष्य, अस्थायी + "+" + aux, aux asinteger)
-
कॉल हल (i + 1, s, curr - aux पूर्णांक के रूप में, लक्ष्य, temp + "-" + aux, - aux asinteger)
-
कॉल हल करें (i + 1, s, curr - बहु + बहु * औक्स पूर्णांक के रूप में, लक्ष्य, अस्थायी + "*" + ऑक्स, बहु * औक्स पूर्णांक के रूप में)
-
-
-
मुख्य विधि कॉल से हल करें (0, संख्या, 0, लक्ष्य, खाली स्ट्रिंग, 0)
-
वापसी रिट
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } typedef long long int lli; class Solution { public: vector <string> ret; void solve(int idx, string s, lli curr, lli target, string temp, lli mult){ //cout << temp << " " << curr << endl; if(idx >= s.size()){ if(target == curr){ ret.push_back(temp); } return; } string aux = ""; for(int i = idx; i < s.size(); i++){ aux += s[i]; if(aux[0] == '0' && aux.size() > 1) continue; if(idx == 0){ solve(i + 1, s, stol(aux), target, aux, stol(aux)); } else { solve(i + 1, s, curr + stol(aux), target, temp + "+" + aux, stol(aux)); solve(i + 1, s, curr - stol(aux), target, temp + "-" + aux, -stol(aux)); solve(i + 1, s, curr - mult + mult * stol(aux), target, temp + "*" + aux, mult * stol(aux)); } } } vector<string> addOperators(string num, int target) { solve(0, num, 0, target, "", 0); return ret; } }; main(){ Solution ob; print_vector(ob.addOperators("232", 8)); }
इनपुट
"232", 8
आउटपुट
[2+3*2, 2*3+2, ]