1、题目描述
输入一个字符串,是一个没有括号的表达式,返回给它加上括号后计算的所有答案的可能。
2、思路
分治。
遍历字符串,每找到一个运算符号,就把字符串分成左右两个部分,分别算出两个部分的答案的组数,
两个数组中的数字一一组合,用运算符进行对应运算,并将其放入到答案数组中。
如果字符串中不包含任何运算符号,那说明它就单纯是个数字,把这个数字直接仿佛答案数组中即可。
返回答案数组。
3、代码
vector<int> diffWaysToCompute(string input) {
vector<int>ans;
string str;
for(int i=0;i<input.size();i++){
while(input[i]!='+'&&input[i]!='-'&&input[i]!='*'&&i<input.size()){
str+=input[i];
i++;
}
if(i==input.size())
break;
char c = input[i];
vector<int> v1 = diffWaysToCompute(input.substr(0,i));
vector<int> v2 = diffWaysToCompute(input.substr(i+1));
for(int i = 0;i<v1.size();i++){
for(int j=0;j<v2.size();j++){
if(c=='+')
ans.push_back(v1[i]+v2[j]);
else if(c=='-')
ans.push_back(v1[i]-v2[j]);
else
ans.push_back(v1[i]*v2[j]);
}
}
str+=input[i];
}
if(ans.empty())
ans.push_back(atoi(input.c_str()));
return ans;
}