मान लीजिए कि हमारे पास एक स्ट्रिंग है जिसमें केवल 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, ]