[Leetcode/C++] 241_Different Ways to Add Parentheses



問題は次のとおりです.

式が指定されている場合は、演算子の順序を指定します.
問題の鍵は,すべての演算の可能なカウントを求めることにある.
まず,任意の演算子を中心として,分割征服により両側を再帰的に解いた.
最初に呼び出されたメインスタックで
振り向くと、
この演算子に基づいて両側を分割征服した場合のすべての再帰を求める.
演算子に基づいて演算を実行します.
main stackから返されるfor文
exp[i]は、演算子が最後に実行された場合を表す.
(すなわち、両側に対してすべての演算を実行した後、exp[i]は演算を実行する.)
完全なコードは次のとおりです.
class Solution {
public:
    vector<int> diffWaysToCompute(string exp) {
        vector<int> res;
        
        for(int i=0; i<exp.size(); i++){
            
            if(exp[i]=='+' || exp[i]=='-' || exp[i]=='*'){
                string s1 = exp.substr(0, i); string s2 = exp.substr(i+1);
                vector<int> v1 = diffWaysToCompute(s1); vector<int> v2 = diffWaysToCompute(s2);
                
                for(int j=0; j<v1.size(); j++){
                    for(int k=0; k<v2.size(); k++){
                        if(exp[i]=='+') res.emplace_back(v1[j]+v2[k]);
                        else if(exp[i]=='-') res.emplace_back(v1[j]-v2[k]);
                        else res.emplace_back(v1[j]*v2[k]);
                    }
                }
            } // if문 끝
            
        }
        
        if(res.size()==0) res.emplace_back(stoi(exp));
        return res;
    }
};