挺喜欢这个题目,练的点比较多。
核心思想还是recursion,因为这个题子问题很明显是母问题的重复。
public class Solution {
public List
diffWaysToCompute(String input) {
List
opt = new ArrayList
();
opt.add('+');
opt.add('-');
opt.add('*');
return helper(input,opt);
}
public int calculate(int l, int r,char opt){
switch(opt){
case '+':
return l+r;
case '-':
return l-r;
case '*':
return l*r;
default :
return -1;
}
}
public List
helper(String s, List
opt){
List
res = new ArrayList
(); boolean number = true; for(int i=0;i
right = helper(s.substring(i+1),opt); List
left = helper(s.substring(0,i),opt); for(Integer l:left){ for(Integer r:right){ res.add(calculate(l.intValue(), r.intValue(),s.charAt(i) )); } } } } if(number) res.add(Integer.parseInt(s)); return res; } }
本文深入探讨了使用递归方法解决不同方式添加括号的问题,通过核心思想、具体代码实现和关键步骤,展示了如何利用递归解决这类问题。详细介绍了函数的调用过程、运算符的选择及其在表达式计算中的应用。
1890

被折叠的 条评论
为什么被折叠?



