Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में कोष्ठक जोड़ने के विभिन्न तरीके

मान लीजिए कि हमारे पास संख्याओं और ऑपरेटरों की एक स्ट्रिंग है, हमें संख्याओं और ऑपरेटरों को समूहबद्ध करने के सभी संभावित तरीकों की गणना करने से सभी संभावित परिणाम प्राप्त करने होंगे। यहां मान्य ऑपरेटर +, - और * हैं। तो अगर इनपुट "2*3-4*5" जैसा है, तो आउटपुट [-34, -14, -10, -10, 10] होगा। ऐसा इसलिए है क्योंकि -

  • (2*(3-(4*5))) =-34

  • ((2*3)-(4*5)) =-14

  • ((2*(3-4))*5) =-10

  • (2*((3-4)*5)) =-10

  • (((2*3)-4)*5) =10

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • मेमो नामक मानचित्र को परिभाषित करें।

  • हल () नामक एक विधि को परिभाषित करें। यह इनपुट स्ट्रिंग को इनपुट के रूप में लेगा।

  • रिट नामक एक सरणी बनाएं

  • यदि मेमो में इनपुट है, तो मेमो [इनपुट]

    लौटाएं
  • मैं के लिए 0 से इनपुट स्ट्रिंग के आकार में -

    • अगर इनपुट [i] कोई समर्थित ऑपरेटर है, तो

      • एक सरणी भाग 1:=हल (0 से i - 1 तक इनपुट का विकल्प)

      • एक सरणी भाग 2:=हल करें (मैं से स्ट्रिंग के अंत तक इनपुट का विकल्प)

      • j के लिए 0 से लेकर part1 के आकार तक

        • k के लिए 0 से लेकर part2 के आकार तक

          • अगर इनपुट [i] जोड़ है, तो

            • भाग [जे] + भाग [के] निष्पादित करें और रिट में जोड़ें

          • अगर इनपुट [i] गुणा है, तो

            • भाग [जे] * भाग [के] निष्पादित करें और रिट में जोड़ें

          • अगर इनपुट [i] घटाव है, तो

            • भाग [जे] - भाग [के] निष्पादित करें और रिट में जोड़ें

  • यदि रिट खाली है, तो इनपुट स्ट्रिंग को पूर्णांक के रूप में लौटाएं

  • मेमो [इनपुट]:=रिट, और रिटर्न रिट

उदाहरण (C++)

आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -

#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;
}
class Solution {
   public:
   map <string, vector<int>> memo;
   vector<int> diffWaysToCompute(string input) {
      vector <int> ret;
      if(memo.count(input)) return memo[input];
      for(int i = 0; i < input.size(); i++){
         if(input[i] == '+' || input[i] == '*' || input[i] == '-'){
            vector <int> part1 = diffWaysToCompute(input.substr(0, i));
            vector <int> part2 = diffWaysToCompute(input.substr(i + 1));
            for(int j = 0; j < part1.size(); j++ ){
               for(int k = 0; k < part2.size(); k++){
                  if(input[i] == '+'){
                     ret.push_back(part1[j] + part2[k]);
                  }
                  else if(input[i] == '*'){
                     ret.push_back(part1[j] * part2[k]);
                  } else {
                     ret.push_back(part1[j] - part2[k]);
                  }
               }
            }
         }
      }
      if(ret.empty()){
         ret.push_back(stoi(input));
      }
      return memo[input] = ret;
   }
};
main(){
   Solution ob;
   print_vector(ob.diffWaysToCompute("2*3-4*5"));
}

इनपुट

"2*3-4*5"

आउटपुट

[-34, -10, -14, -10, 10, ]

  1. सी++ में स्ट्रिंग में बोल्ड टैग जोड़ें

    मान लीजिए कि हमारे पास एक स्ट्रिंग s और स्ट्रिंग्स की एक सूची है जिसे dict कहा जाता है, हमें उस dict में मौजूद सबस्ट्रिंग को s में लपेटने के लिए बोल्ड टैग और की एक बंद जोड़ी जोड़नी होगी। जब दो ऐसे सबस्ट्रिंग ओवरलैप होते हैं, तो हमें उन्हें केवल एक जोड़ी बंद बोल्ड टैग से लपेटना होगा। साथ ही, यदि बो

  1. C++ में दो अलग-अलग सेटों से एक या अधिक जोड़े चुनने के तरीके

    इस समस्या में, हमें दो धनात्मक संख्याएँ n और m (n <=m) दी गई हैं जो क्रमशः दो समुच्चयों के मदों की कुल संख्या है। हमारा काम इन सेटों के आइटम से जोड़े (एक या अधिक) चुनने के तरीकों की कुल संख्या का पता लगाना है। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट 2 2 आउटपुट 6 स्पष्टीकरण हमारे पास दो तत

  1. दो योग IV - इनपुट C++ में एक BST है

    मान लीजिए हमारे पास एक बाइनरी सर्च ट्री और एक लक्ष्य मान है; हमें यह जांचना होगा कि क्या बीएसटी में दो तत्व मौजूद हैं जैसे कि उनका योग दिए गए लक्ष्य के बराबर है या नहीं। तो, अगर इनपुट पसंद है तो आउटपुट ट्रू होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - सरणी को परिभाषित करें v एक