题目描述: 给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。
示例 1:
输入: “2-1-1” 输出: [0, 2] 解释: ((2-1)-1) = 0 (2-(1-1)) = 2
思路: 对于每一个运算符,都会分成两部分,然后会出现一种结果
代码如下:
class Solution { public: vector<int> diffWaysToCompute(string input) { int idx=0; int num=0; vector<int>res; while(idx<input.size()&&isdigit(input[idx])){ num=num*10+input[idx]-'0'; idx++; } if(idx==input.size()) return {num}; for(int i=0;i<input.size();i++){ if(isoprater(input[i])){ vector<int>res1=diffWaysToCompute(input.substr(0,i)); vector<int>res2=diffWaysToCompute(input.substr(i+1)); for(int r1:res1){ for(int r2:res2){ res.push_back(calulate(r1,input[i],r2)); } } } } return res; } bool isoprater(const char& c){ return c=='+'||c=='-'||c=='*'; } int calulate(int num1,char oprate,int num2){ if(oprate=='+') return num1+num2; else if(oprate=='-') return num1-num2; else if(oprate=='*') return num1*num2; return 0; } };