[Leetcode/C++] 241_Different Ways to Add Parentheses
8349 ワード
問題は次のとおりです.
式が指定されている場合は、演算子の順序を指定します.
問題の鍵は,すべての演算の可能なカウントを求めることにある.
まず,任意の演算子を中心として,分割征服により両側を再帰的に解いた.
最初に呼び出されたメインスタックで
振り向くと、
この演算子に基づいて両側を分割征服した場合のすべての再帰を求める.
演算子に基づいて演算を実行します.
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;
}
};
Reference
この問題について([Leetcode/C++] 241_Different Ways to Add Parentheses), 我々は、より多くの情報をここで見つけました https://velog.io/@ssssujini99/LeetcodeC-241Different-Ways-to-Add-Parenthesesテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol