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
Example 1
Input:
Output:
Example 2
Input:
Output:
+,
-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; } };
相关文章推荐
- 预习JavaScript第一章
- JavaScript学习笔记(4)——JavaScript语法之变量
- HTML全局属性
- HTML参考手册
- js、css的动态引入
- Node.js模块封装及使用方法
- Codeforces Round #305 (Div. 2) D.Mike and Feet
- JQuery简易轮播图
- C# dynamic 动态创建 json
- Js 中 == 与 === 的区别
- JS、javascript获取当前时间戳的方法
- js中substring和substr的用法
- Effective Java2读书笔记-对于所有对象都通用的方法(一)
- JS中的基本运动逻辑思想总结
- JS的构造及其事件注意点总结
- Json格式化form表单里面需要提交的数据
- javascript编程习惯总结
- 详解HTML/XHTML中img图像标签的基本用法
- 学习web前端三个月感悟
- jQuery总结