方法一:分治法
根据运算符,划分为左右位置,分别递归计算左右表达式所有值,再将其组合运算。
class Solution {
public:
vector<int> diffWaysToCompute(string expression) {
vector<int> ways;//保存表达式结果
int n = expression.size();
for(int i=0;i<n;i++){
char c = expression[i];
if(c=='+' || c=='-' || c=='*'){
//分治计算左右表达式的值
vector<int> left = diffWaysToCompute(expression.substr(0,i));
vector<int> right = diffWaysToCompute(expression.substr(i+1));
for(int l : left){
for(int r : right){
switch(c){
case '+': ways.push_back(l+r);break;
case '-': ways.push_back(l-r);break;
case '*': ways.push_back(l*r);break;
}
}
}
}
}
//ways为空,说明表达式只有数字
if(ways.empty()) ways.push_back(stoi(expression));
return ways;
}
};