分治
分治的本质就是拆分成最小的部分进行操作
字符串通过调用递归进行运算符的拆分,拆分成一个个独立的运算结果,然后进行运算得到最终的结果
public static ArrayList<Integer> diffWaysToCompute(String expression) {
ArrayList<Integer> res = new ArrayList<Integer>();
for(int i = 0;i < expression.length();i++) {
char c = expression.charAt(i);
if(c == '+' || c == '-' || c == '*' || c == '/') {
ArrayList<Integer> left = diffWaysToCompute(expression.substring(0,i));
ArrayList<Integer> right = diffWaysToCompute(expression.substring(i+1));
for (int leftValue : left) {
for (int rightValue : right) {
switch (c) {
case '+':
res.add(leftValue + rightValue);
break;
case '-':
res.add(leftValue - rightValue);
break;
case '*':
res.add(leftValue * rightValue);
break;
case '/':
res.add(leftValue / rightValue);
break;
}
}
}
}
}
if (res.size() == 0) {
res.add(Integer.valueOf(expression));
}
return res;
}