题目描述
Given a string of numbers and operators, return all possible results from computing all the different possible ways to group numbers and operators. The valid operators are +, - and *.
思路分析
采用分而治之的思想,将这个看似复杂的问题简单化:从左到右顺序找出’+’,’-’和’*’,当找到一个运算符时就将字符串分成左、右两部分,分别调用diffWaysToCompute函数递归计算所有可能的值,最后利用for循环遍历左、右两部分vector的值进行交叉运算,并将结果放在容器result中;如果没有找到任何运算符,就将字符串转换成int型数字并放在result。
代码实现
class Solution {
public:
vector<int> diffWaysToCompute(string input) {
vector<int> result;
for (int s = 0; s < input.length(); s++) {
char ch = input.at(s);
if (ch == '+' || ch == '-' || ch == '*') {
vector<int> left = diffWaysToCompute(input.substr(0, s));
//substr默认从input的第i+1位到input的末尾
vector<int> right = diffWaysToCompute(input.substr(s+1));
for (int i = 0; i < left.size(); i++) {
for (int j = 0; j < right.size(); j++) {
if (ch == '+') {
result.push_back(left[i] + right[j]);
}
else if (ch == '-') {
result.push_back(left[i] - right[j]);
}
else if (ch == '*') {
result.push_back(left[i] * right[j]);
}
}
}
}
}
if (result.size() == 0) {
result.push_back(atoi(input.c_str()));
}
return result;
}
};