您的位置:首页 > Web前端

leetcode-241. Different Ways to Add Parentheses

2017-05-01 10:44 316 查看
考察点:递归,分治。

思路:这道题是典型的递归,分治题目。首先应该明确主函数是什么作用:它接受一个string,返回由这个string组成的所有种计算结果vector。因此,可以遍历一遍字符串,找出运算符将字符串分成两个字符串,然后分别用该函数递归。然后将结果存入ret数组里。在for循环外,如果ret是空的,说明该字符串就是一个完整的数字,直接返回它的整数化结果就行。这也是最终判断条件在函数最后而不是函数最初的一种题型。

C++代码:

class Solution {
public:
vector<int> diffWaysToCompute(string input) {
int len = input.size();
vector<int> ret;
for (int i=0; i<len; i++) {
if (input[i]=='+'||input[i]=='-'||input[i]=='*') {
vector<int> leftPart = diffWaysToCompute(input.substr(0, i));
vector<int> rightPart = diffWaysToCompute(input.substr(i+1));
for (auto numleft : leftPart) {
for (auto numright : rightPart) {
switch (input[i]) {
case '+' : ret.push_back(numleft + numright);
break;
case '-' : ret.push_back(numleft - numright);
break;
case '*' : ret.push_back(numleft * numright);
break;
}
}
}
}
}
if (ret.empty()) {  //  has no '+' or '-' or '*';
ret.push_back(atoi(input.c_str()));
}
return ret;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: