void backtrack(ArrayList<Integer> list, int[] nums,
                   List<List<Integer>> results) {

        if (list.size() == nums.length) {
            results.add(new ArrayList<Integer>(list));
        } else {
            for (int i = 0; i < nums.length; i++) {
                if (!list.contains(nums[i])) {
                    list.add(nums[i]);
                    backtrack(list, nums, results);
                    list.remove(list.size() - 1);
                }
            }
        }
    }