কম্পিউটার টিউটোরিয়াল

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

সমাধানের ধাপগুলো:

  • memo নামের একটি ম্যাপ সংজ্ঞায়িত করুন।
  • solve() মেথড বানান যা ইনপুট স্ট্রিং নেবে:
    • ret অ্যারে বানান।
    • যদি memo-এ ইনপুট থাকে, memo[input] ফেরত দিন।
    • i = 0 থেকে input.size()-1 পর্যন্ত:
      • যদি input[i] কোনো সাপোর্টেড অপারেটর হয়:
        • part1 := solve(input.substr(0, i))
        • part2 := solve(input.substr(i+1))
        • j = 0 থেকে part1.size()-1 পর্যন্ত:
          • k = 0 থেকে part2.size()-1 পর্যন্ত:
            • যদি input[i] == '+', part1[j] + part2[k] ret-এ ঢোকান
            • যদি input[i] == '*', part1[j] * part2[k] ret-এ ঢোকান
            • যদি input[i] == '-', part1[j] - part2[k] ret-এ ঢোকান
    • যদি ret খালি হয়, ইনপুট স্ট্রিংকে ইন্টিজারে কনভার্ট করে ret-এ ঢোকান।
    • memo[input] := ret ফেরত দিন।

উদাহরণ (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. N কে ১, ৩ এবং ৪ এর যোগফল হিসেবে প্রকাশ করার পদ্ধতির সংখ্যা (C++)

  2. স্ট্রিংয়ে বোল্ড ট্যাগ যোগ করা C++-এ

  3. সি++-এ দুটি ভিন্ন সেট থেকে এক বা একাধিক জোড়া নির্বাচন করার পদ্ধতি

  4. C++-এ BST-এ Two Sum IV (Two Sum IV - Input is a BST)