Different Ways to Add Parentheses
2015-07-30 15:14
465 查看
Different Ways to Add Parentheses
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
Example 1
Input:
Output:
Example 2
Input:
Output:
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> vals; vector<char> ops; parse(input,vals,ops); if (vals.size() == 1) { return vals; } return diffWaysToCompute(vals, ops, 0, vals.size()); } private: vector<int> diffWaysToCompute(vector<int> const &vals, vector<char> const & ops, int beg, int end) { vector<int> output; int size = end - 1; for (size_t i = beg + 1; i <= size; i++) { vector<int> left = diffWaysToCompute(vals, ops, beg, i); vector<int> right = diffWaysToCompute(vals, ops, i, end); for (int il = 0; il < left.size(); ++il) { for (int ir = 0; ir < right.size(); ++ir) { output.push_back(calc(left[il], right[ir],ops[i - 1])); } } } if(output.empty()) { output.push_back(vals[beg]); } return output; } void parse(string & input,vector<int> &vals,vector<char> &ops) { auto it = input.begin(); auto const itEnd = input.end(); while (it != itEnd) { char ch = *it; if (isdigit(ch)) { vals.push_back(getVal(it, itEnd)); } else { ops.push_back(ch); ++it; } } } int calc(int a, int b, char op) { switch(op) { case '+': return a + b; case '-': return a - b; case '*': return a * b; } return 1; } int getVal(string::iterator & it, string::iterator const &itEnd) { int val = 0; while (it != itEnd && isdigit(*it)) { val = val * 10 + *it - '0'; ++it; } return val; } };
相关文章推荐
- 通用的事件侦听器函数实现(JS)
- 在iframe里调用parent.func()引出的js函数运行在它们被定义的作用域里,而不是它们被执行的作用域里
- NopCommerce Html扩展方法Html.Widget
- Json对象与Json字符串互转(4种转换方式)
- 使用js复制链接中的部分文字的方法
- 使用less开发css
- html的转码玉反转码
- 在线extjs帮助文档
- action的变量在jsp中的取值问题
- AugularJS基础概念
- js将人民币金额转换为大写
- c#操作带属性的列表形式json
- c#操作简单列表形式的json
- 小技巧解决“FF不能读取outerHTML”的问题
- Bootstrap 入门(1)
- 常用正则表达式
- Linq to js使用
- 【读书笔记】 通过原生javascript获取margin
- c#获取简单json的值
- CSS 外边距合并