挺喜欢这个题目,练的点比较多。
核心思想还是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; } }