数组的全排列

数组的全排列

问题

这个题目说的是,给你一个整数数组,并且数组中没有重复元素,你要返回这个数组所有可能的排列。

比如说给你的数组是:

0, 1, 2

你要返回的所有排列是:

0, 1, 2
0, 2, 1
1, 0, 2
1, 2, 0
2, 0, 1
2, 1, 0

代码

public class AlgoCasts {

  void permuteRec(List<Integer> nums, int start, List<List<Integer>> result) {
    if (start == nums.size()) {
      result.add(new ArrayList<>(nums));
    } else {
      for (int i = start; i < nums.size(); ++i) {
        Collections.swap(nums, i, start);
        permuteRec(nums, start + 1, result);
        Collections.swap(nums, i, start);
      }
    }
  }

  // Time: O(n*n!), Space: O(n)
  public List<List<Integer>> permute(int[] nums) {
    if (nums == null || nums.length == 0) return new ArrayList<>();
    List<List<Integer>> result = new ArrayList<>();

    List<Integer> list = new ArrayList<>();
    for (int num: nums) list.add(num);

    permuteRec(list, 0, result);
    return result;
  }

}

  转载请注明: ForwardXu 数组的全排列

 上一篇
跳完数组的最少跳数 跳完数组的最少跳数
跳完数组的最少跳数问题 这个题目说的是,给你一个非负整数数组,数组中的每个数字表示那个位置上可以向后跳的最大步数。一开始你站在下标为 0 的位置,你要计算出最少需要跳几次才能到达数组最后位置。如果无法到达数组最后位置,则返回 -1。 比如说
2018-12-23
下一篇 
跳数组 跳数组
跳数组问题 这个题目说的是,给你一个非负整数数组,数组中的每个数字表示那个位置上可以向后跳的最大步数。一开始你站在下标为 0 的位置,你要判断是否可以跳到数组最后的位置。 比如说,给你的数组 a 是: 2, 4, 0, 1, 2 一开始
2018-12-16
  目录