Permutations

Given a collection of numbers, return all possible permutations. For example, [1,2,3] have the following permutations: [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1].

  • Time: O(n)
  • Space: O(1)
public List<List<Integer>> permute(int[] nums) {
    List<List<Integer>> ret = new ArrayList<>();
    List<Integer> path = new ArrayList<>();
    boolean[] flag = new boolean[nums.length];
    permuteDfs(ret, path, nums, flag);
    return ret;
}

private void permuteDfs(List<List<Integer>> ret, 
            List<Integer> path, int[] nums, boolean[] flag) {
    if (path.size() == nums.length) {
        ret.add(new ArrayList<>(path));
        return;
    }
    for (int i = 0; i < nums.length; i++) {
        if (!flag[i]) {
            flag[i] = true;
            path.add(nums[i]);
            permuteDfs(ret, path, nums, flag);
            path.remove(path.size() - 1);
            flag[i] = false;
        }
    }
}

results matching ""

    No results matching ""