您的位置:首页 > Web前端

[LeetCode]241. Different Ways to Add Parentheses

2016-03-10 21:25 501 查看
题意: 给你一个字符串,包括数字和运算符(+、-、*)。然后你选择往里面添加括号改变该字符串的运算顺序,求所有可能的运算顺序对应的结果的集合。例如”2-1-1”,可以改为如下形式((2-1)-1) = 0 或者(2-(1-1)) = 2,则结果为[0,2]。

思路: 主要操作就是往里面插入括号,并不涉及移动数字的位置,所以每次找到一个运算符之后,对于两边的字符串求得各自对应的结果集合(递归实现),按照当前对应的运算符规则进行运算,统计结果即可。

代码:

public List<Integer> diffWaysToCompute(String input) {
List<Integer> ans = new ArrayList<>();
int len = input.length();
for(int i = 0; i < len; ++i){
if(input.charAt(i) == '+' || input.charAt(i) == '-' || input.charAt(i) == '*'){
List<Integer> left = diffWaysToCompute(input.substring(0, i));
List<Integer> right = diffWaysToCompute(input.substring(i+1));
int len_l = left.size(), len_r = right.size();
for(int l = 0; l < len_l; ++l){
for(int r = 0; r < len_r; ++r){
if(input.charAt(i) == '+'){
ans.add(left.get(l) + right.get(r));
}
if(input.charAt(i) == '-'){
ans.add(left.get(l) - right.get(r));
}
if(input.charAt(i) == '*'){
ans.add(left.get(l) * right.get(r));
}
}
}
}
}
if(ans.isEmpty()){
ans.add(Integer.parseInt(input));
}
return ans;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode