您的位置:首页 > Web前端

Different Ways to Add Parentheses

2016-03-06 13:13 295 查看
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
*
.

Example 1

Input:
"2-1-1"
.
((2-1)-1) = 0
(2-(1-1)) = 2


Output:
[0, 2]


Example 2

Input:
"2*3-4*5"

(2*(3-(4*5))) = -34
((2*3)-(4*5)) = -14
((2*(3-4))*5) = -10
(2*((3-4)*5)) = -10
(((2*3)-4)*5) = 10


Output:
[-34, -14, -10, -10, 10]


class Solution {
public:
vector<int> diffWaysToCompute(string input) {
vector<int> result = visit(input);
return result;
}
private:
int findSymbol(string input, int pos)
{
int a = input.find('+', pos);
if (a == -1)
{
a = INT_MAX;
}
int b = input.find('-', pos);
if (b == -1)
{
b = INT_MAX;
}
int c = input.find('*', pos);
if (c == -1)
{
c = INT_MAX;
}

int result = min(a, min(b, c));
return result;
}

vector<int> visit(string input)
{
int n = input.length();
vector<int> result;
if (findSymbol(input, 0) == INT_MAX)
{
result.push_back(atoi(input.c_str()));
}
else
{
int pos = 0;
int index = 0;
while ((index = findSymbol(input, pos)) != INT_MAX)
{
vector<int> a = visit(input.substr(0, index));
vector<int> b = visit(input.substr(index+1));
for (int i = 0; i < a.size(); i++)
{
for (int j = 0; j < b.size(); j++)
{
if (input[index] == '+')
{
result.push_back(a[i] + b[j]);
}
else if (input[index] == '-')
{
result.push_back(a[i] - b[j]);
}
else
{
result.push_back(a[i] * b[j]);
}
}
}
pos = index + 1;
}
}

return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: