241. Different Ways to Add Parentheses
来源:互联网 发布:学校机房网络权限开启 编辑:程序博客网 时间:2024/05/08 21:47
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]
可以看做这一堆操作符,给定一个顺序计算,这个顺序可以看做全排列,不过例中的两个*, 如果最后计算- ,那么前面两个*的顺序不同,实际上只算一种计算方法。还是用拆分+递归才是合理的解决。
另外凡是这种拆分的搜索,经常会出现重复计算的情况,可以将已经计算过的式子塞入hashmap下次不必再次拆分计算以改善性能。
摘自:https://leetcode.com/discuss/48477/a-recursive-java-solution-284-ms
public List<Integer> diffWaysToCompute(String input) { List<Integer> ret = new LinkedList<Integer>(); for (int i=0; i<input.length(); i++) { if (input.charAt(i) == '-' || input.charAt(i) == '*' || input.charAt(i) == '+' ) { String part1 = input.substring(0, i); String part2 = input.substring(i+1); List<Integer> part1Ret = diffWaysToCompute(part1); List<Integer> part2Ret = diffWaysToCompute(part2); for (Integer p1 : part1Ret) { for (Integer p2 : part2Ret) { int c = 0; switch (input.charAt(i)) { case '+': c = p1+p2; break; case '-': c = p1-p2; break; case '*': c = p1*p2; break; } ret.add(c); } } } } if (ret.size() == 0) { ret.add(Integer.valueOf(input)); } return ret; }
0 0
- [leetcode] 241.Different Ways to Add Parentheses
- Leetcode-241.Different Ways to Add Parentheses
- 241. Different Ways to Add Parentheses LeetCode
- Leetcode- 241.Different Ways to Add Parentheses
- [LeetCode]241. Different Ways to Add Parentheses
- 241. Different Ways to Add Parentheses
- [leetcode] 241. Different Ways to Add Parentheses
- 241. Different Ways to Add Parentheses
- 241. Different Ways to Add Parentheses
- LeetCode *** 241. Different Ways to Add Parentheses
- 241. Different Ways to Add Parentheses
- 241. Different Ways to Add Parentheses
- LeetCode 241. Different Ways to Add Parentheses
- 241. Different Ways to Add Parentheses
- 241. Different Ways to Add Parentheses
- LeetCode 241. Different Ways to Add Parentheses
- LeetCode-241.Different Ways to Add Parentheses
- LeetCode 241. Different Ways to Add Parentheses
- 基于Python3 神经网络的实现
- 85-002-9 在web项目中实现公共管理员模块Account
- Android热更新微信实践地址
- Linux GCC 开发入门(一) -- 使用makefile 命令行编译
- 85-002-10 在web项目中使用RequestAware接口
- 241. Different Ways to Add Parentheses
- 数据结构与算法简记:折半插入排序
- 解决使用maven打包项目时,依赖jar先解压成class在打包的问题
- java类的访问权限
- 85-002-11 在web项目中对Action层进行公共方法的抽取放入到BaseAction中
- html,css元素居中
- 85-002-12 基于frameSet搭建前端页面的后台
- 85-002-13 基于EasyUI搭建前端页面的后台
- 几种内部排序算法