题目描述
思路分析
表达式计算-表达式树-递归
背景知识:中缀表达式和表达式树一一对应。
这道题从表达式树的角度思考来说和这道题完全相同。
我们还可以直接从递归来做。
代码实现
class Solution {
public:
vector<string> expr;
vector<int> diffWaysToCompute(string s) {
for(int i=0;i<s.size();i++){
if(isdigit(s[i])){
int j=i,x=0;
while(j<s.size()&&isdigit(s[j])) x=x*10+(s[j++]-'0');
expr.push_back(to_string(x));
i=j-1;
}
else expr.push_back(s.substr(i,1));
}
return dfs(0,expr.size()-1);
}
vector<int> dfs(int l,int r){
if(l==r) return{stoi(expr[l])};
vector<int> res;
for(int i=l+1;i<r;i+=2){
auto left=dfs(l,i-1);
auto right=dfs(i+1,r);
for(auto a:left)
for(auto b:right){
int z;
if(expr[i]=="+") z=a+b;
else if(expr[i]=="-") z=a-b;
else z=a*b;
res.push_back(z);
}
}
return res;
}
};