public ArrayList<ArrayList<Integer>> threeSum(int[] numbers) {
        // write your code here
        Arrays.sort(numbers);
        ArrayList<ArrayList<Integer>> ans = new ArrayList<ArrayList<Integer>>();
        for (int i = 0; i < numbers.length - 2; ++i) {
            int val = numbers[i];
            for (ArrayList<Integer> arr : twoSum(numbers, i + 1, numbers.length - 1, 0 - val)) {
                ArrayList<Integer> temp = new ArrayList<Integer>();
                temp.add(val);
                temp.addAll(arr);
                ans.add(temp);
            }
            while (i + 1 < numbers.length - 1 && val == numbers[i + 1]) {
                ++i;
            }
        }
        return ans;
    }