Copy class Solution {
public List<Integer> diffWaysToCompute(String input) {
List<Integer> res = new ArrayList<Integer>();
List<Integer> l1 = new ArrayList<Integer>();
List<Integer> l2 = new ArrayList<Integer>();
for (int i = 0; i < input.length(); i++) {
// meet operator, divide 2 parts, get result list
if (input.charAt(i) == '+'
|| input.charAt(i) == '-'
|| input.charAt(i) == '*') {
l1 = diffWaysToCompute(input.substring(0, i));
l2 = diffWaysToCompute(input.substring(i+1));
// conquer 2 result
for (int i1 : l1) {
for (int i2 : l2) {
int tmp = 0;
switch(input.charAt(i)) {
case '+':
tmp = i1 + i2;
break;
case '-':
tmp = i1 - i2;
break;
case '*':
tmp = i1 * i2;
}
res.add(tmp);
}
}
}
}
// do not contain operator, return value
if (res.size() == 0) res.add(Integer.parseInt(input));
return res;
}
}
/**
walk, meet + - *, divide 2 parts, recursion
**/