Different Ways to Add Parentheses 不同的添加括号的方式
来源:互联网 发布:淘宝假冒品牌处罚 编辑:程序博客网 时间:2024/06/08 01:03
如何给表达式添加不同的括号,得出相应的结果。这题的思想跟计算不同的二分搜索树的思想是一样的。
需要将一个大问题分解成部分的小问题。
举个例子:
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将这个计算看成2部分。
[2] , [ 3 - 4 * 5] 2部分的计算结果也可能有多种,将它们的计算结果分别进行运算(这里是*)。
base情况:只有一个2,那么这部分的计算结果就是2了。
[3 - 4 * 5] 接着再拆分成小部分。
[3] [ 4* 5] 一步步分解问题。
注意:对原始input的parse很影响性能。见代码中parseExp函数:
parseExp(String input, List<Character> exps, List<String> nums)
代码:
public List<Integer> diffWaysToCompute(String input) { List<Character> exps = new ArrayList<>(); List<String> nums = new ArrayList<>(); parseExp(input, exps, nums); return generateValue(nums, exps, 0, nums.size() - 1); } private List<Integer> generateValue(List<String> nums, List<Character> exps, int begin, int end) { List<Integer> store = new ArrayList<>(); if (begin == end) { store.add(Integer.parseInt(nums.get(begin))); return store; } for (int i = begin; i < end; i++) { List<Integer> leftList = generateValue(nums, exps, begin, i); List<Integer> rightLIst = generateValue(nums, exps, i + 1, end); for (Integer leftValue : leftList) { for (Integer rightValue : rightLIst) { int calResult = 0; switch (exps.get(i)) { case '+': calResult = leftValue + rightValue; break; case '-': calResult = leftValue - rightValue; break; case '*': calResult = leftValue * rightValue; break; } store.add(calResult); } } } return store; } private void parseExp(String input, List<Character> exps, List<String> nums) { int begin = 0; for (int i = 0; i < input.length(); i++) { if (input.charAt(i) == '+' || input.charAt(i) == '-' || input.charAt(i) == '*') { exps.add(input.charAt(i)); nums.add(input.substring(begin, i)); begin = i + 1; } } nums.add(input.substring(begin, input.length())); }
1 0
- Different Ways to Add Parentheses 不同的添加括号的方式
- [LeetCode] Different Ways to Add Parentheses 加括号的不同方式
- LeetCode OJ 之 Different Ways to Add Parentheses(增加括号的不同方法)
- LeetCode 241. Different Ways to Add Parentheses(加括号的不同方法)
- leetcode 241. Different Ways to Add Parentheses 添加括号问题 + 按照index递归
- 241. Different Ways to Add Parentheses 分治法的应用
- Different Ways to Add Parentheses
- Different Ways to Add Parentheses
- Different Ways to Add Parentheses
- Different Ways to Add Parentheses
- Different Ways to Add Parentheses
- Different Ways to Add Parentheses
- Different Ways to Add Parentheses
- Different Ways to Add Parentheses
- Different Ways to Add Parentheses
- Different Ways to Add Parentheses
- Different Ways to Add Parentheses
- Different Ways to Add Parentheses
- MySQL数据库常用命令
- 很多知识点c语言(单片机)
- android中双击退出程序的帮助类
- 定制椭圆形状
- 使用Servlet+jsp构建MVC体系结构的Web应用
- Different Ways to Add Parentheses 不同的添加括号的方式
- leetcode #83 in cpp
- Crossin先生的微信打飞机游戏(3)
- Struts2的配置
- 让CodeReview成为一种团队习惯
- http://my.oschina.net/u/2352897/blog
- codeforces 645C
- 语音信号去混响原理与技术
- 谈cookie和session