具体看leetcode中一道题:
https://leetcode-cn.com/problems/permutations/submissions/
生成不重复数组的所有排列,代码如下:
class Solution {
public List<List<Integer>> permute(int[] nums) {
int[] arr = new int[nums.length];
boolean[] flags = new boolean[nums.length];
List<List<Integer>> res = new ArrayList<>();
permute(nums, flags, res, arr, -1);
return res;
}
private void permute(int[] nums, boolean[] flags, List<List<Integer>> res, int[] arr, int id) {
if (id == arr.length - 1) {
res.add(getList(arr));
return;
}
for (int i = 0; i < flags.length; i++) {
if (flags[i]) {
continue;
}
arr[id + 1] = nums[i];
flags[i] = true;
permute(nums, flags, res, arr, id + 1);
flags[i] = false;
}
}
private List<Integer> getList(int[] arr) {
// 这种方式只需要1ms
List<Integer> list = new ArrayList<>();
for (Integer item: arr) {
list.add(item);
}
return list;
// 改用下面方式,要变为8ms
// return Arrays.stream(arr).boxed().collect(Collectors.toList());
}
}