[leetcode] 241.Different Ways to Add Parentheses
2015-08-17 17:49
435 查看
题目:
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]
题意:
给定一个字符串代表四则运算表达式,包含数字以及”+”,”-“,”*”。加入适当的括号,从而得出所有的结果值。
思路:
这道题目其实就是采用回溯的方法,以四则运算表达式中的每个运算符作为划分。左边的一部分的运算结果,与右边的运算结果就可以分别求出。然后将m*n种组合结果加到最终的结果值中即可。比如上面的式子中,2*3-4*5,当以中间的减号作为划分的时候,前面一部分就是去计算2*3,后面一部分就是去计算4*5.再比如以第一个* 作为划分的时候,前面一部分就是2;后面一部分是计算3-4*5,这个子表达式又可以以”-“或者”*”进行划分,得到-17以及-5。将前面一部分的结果2与后面那部分的结果-17,-5分别求出乘的结果。
以上。
代码如下:
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]
题意:
给定一个字符串代表四则运算表达式,包含数字以及”+”,”-“,”*”。加入适当的括号,从而得出所有的结果值。
思路:
这道题目其实就是采用回溯的方法,以四则运算表达式中的每个运算符作为划分。左边的一部分的运算结果,与右边的运算结果就可以分别求出。然后将m*n种组合结果加到最终的结果值中即可。比如上面的式子中,2*3-4*5,当以中间的减号作为划分的时候,前面一部分就是去计算2*3,后面一部分就是去计算4*5.再比如以第一个* 作为划分的时候,前面一部分就是2;后面一部分是计算3-4*5,这个子表达式又可以以”-“或者”*”进行划分,得到-17以及-5。将前面一部分的结果2与后面那部分的结果-17,-5分别求出乘的结果。
以上。
代码如下:
class Solution { public: vector<int> diffWaysToCompute(string input) { vector<int> result; if (input.empty())return result; int num = 0; if (isInt(input, num)) { result.push_back(num); return result; } for (int i = 0; i < input.size(); i++) { if (input[i] < '0' || input[i] > '9') { vector<int> temp1 = diffWaysToCompute(input.substr(0, i)); vector<int> temp2 = diffWaysToCompute(input.substr(i + 1)); if (!temp1.empty() && !temp2.empty()) { for (auto t1 : temp1) for (auto t2 : temp2) { switch (input[i]) { case '+': result.push_back(t1 + t2); break; case '-': result.push_back(t1 - t2); break; case '*': result.push_back(t1 * t2); break; } } } } } return result; } bool isInt(string input, int &num) { num = 0; for (auto i : input) { if (i < '0' || i > '9')return false; num *= 10; num += (i - '0'); } return true; } };
相关文章推荐
- C# javascript 采用 RSA 加密解密
- HDU Today(dijskra)
- 关于jsp中img绝对路径的解决方法
- JS异常处理机制
- Javascript基础
- 基于jquery实现放大镜效果
- Javascript中bind()方法的使用与实现
- 提示牌(提示后-自动消失)------------ jquery.gritter
- CSS3学习笔记(2)-CSS盒子模型
- JS扩充类型的功能
- jQuery Validate验证框架详解
- Ajax解析JSON
- 使用jquery easyui datetimebox 设置默认时间
- jQuery动态加载css文件
- jquery的要点
- js Array(数组)操作的最简短最容易理解方法
- bootstrap-editable文档
- 如何解决js跨域问题
- js删除数组元素
- QTableWidget详解(样式、右键菜单、表头塌陷、多选等)