这个题以前应该整理过,divide and conquer的方法很巧妙的fit in
public List
diffWaysToCompute(String input) {
HashSet
set = new HashSet
();
set.add('+');
set.add('*');
set.add('-');
List
res = helper(input, set);
Collections.sort(res);
return res;
}
public List
helper(String input, HashSet
set){ List
res = new ArrayList
(); for(int i=0; i
left = diffWaysToCompute(input.substring(0,i)); List
right = diffWaysToCompute(input.substring(i+1)); for(Integer l : left){ for(Integer r : right){ if(opt == '+'){ res.add(l+r); }else if(opt == '-'){ res.add(l-r); }else{ res.add(l*r); } } } } } if(res.isEmpty()) res.add(Integer.parseInt(input)); return res; }