private List<Integer> diffWaysToComputeUtil(List<Integer> operands, List<Character> operators, int start, int end) {
        if (start > end) {
            if (start >= 0) {
                return Collections.singletonList(operands.get(start));
            } else {
                return Collections.singletonList(operands.get(end));
            }
        }
        List<Integer> result = new ArrayList<>();
        for (int i = start; i <= end; i++) {
            List<Integer> leftResult = diffWaysToComputeUtil(operands, operators, start, i - 1);
            List<Integer> rightResult = diffWaysToComputeUtil(operands, operators, i + 1, end);

            for (int left : leftResult) {
                for (int right : rightResult) {
                    result.add((int)operate(left, right, operators.get(i)));
                }
            }
        }
        return result;
     }
https://leetcode.com/problems/different-ways-to-add-parentheses/
src/com/interview/recursion/DifferentWaysToAddParentheses.java