题目:
给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。
输入: “23-45”
输出: [-34, -14, -10, -10, 10]
解释:
(2*(3-(45))) = -34
((23)-(45)) = -14
((2(3-4))5) = -10
(2((3-4)5)) = -10
(((23)-4)*5) = 10
来源:力扣(LeetCode)
基础题:递归加回溯(未剪枝,可用hashmap)
public List<Integer> diffWaysToCompute(String input) {
return helper(input);
}
public List<Integer> helper(String s) {
List<Integer>list = new ArrayList<Integer>();
if(!s.contains("+")&&!s.contains("-")&&!s.contains("*")) {
list.add(Integer.valueOf(s));
return list;
}
for(int i = 0;i<s.length();i++) {
if(s.charAt(i)=='+'||s.charAt(i)=='-'||s.charAt(i)=='*') {
for(int p1:helper(s.substring(0,i)))
for(int p2:helper(s.substring(i+1,s.length()))) {
if(s.charAt(i)=='+') {list.add(p1+p2);}
else if(s.charAt(i)=='-') {list.add(p1-p2);}
else {list.add(p1*p2);}
}
}
}
return list;
}
来源:CSDN
作者:DEUSJIN
链接:https://blog.csdn.net/qq_35684046/article/details/104286427