题意:给定一串包含数字和运算符的字符串,可以在表达式中合理地加上括号,运算符只有:+,-,*。返回所有可能的结果。
比如:
输入:“2-1-1”
可能的情况有:
1.((2-1)-1) = 0;
2.(2-(1-1))=2
仔细观察可以看出,这个问题可以分成子问题的:对于一个运算符,可以在这个符号两边把字符串分成左右两个部分。然后左右两个部分又是一个同样的问题,于是可以使用递归来做。最后要注意终止条件。
vector<int> diffWaysToCompute(string input){ vector<int> ans; for (int i = 0; i < input.length(); ++i){ char cur = input[i]; if (cur == '+' || cur == '-' || cur == '*'){ vector<int> num1 = diffWaysToCompute(input.substr(0, i)); vector<int> num2 = diffWaysToCompute(input.substr(i + 1)); for (int j = 0; j < num1.size(); ++j){ for (int k = 0; k < num2.size(); ++k){ if (cur == '+'){ ans.push_back(num1[j] + num2[k]); } else if (cur == '-'){ ans.push_back(num1[j] - num2[k]); } else { ans.push_back(num1[j] * num2[k]); } } } } } if (ans.empty()){ ans.push_back(atoi(input.c_str())); } return ans; }