递归每次从数组中取一个值放入链表中,直到数组中的值全部放在链表中,链表即为数组的一次排列,遍历即可 import java.util.*;
public class Solution { public ArrayList<ArrayList> permute(int[] num) { ArrayList<ArrayList> res = new ArrayList<ArrayList>(); ArrayList list = new ArrayList();
if (num == null || num.length == 0) {
return res;
}
//递归遍历所有的排列
mute(num, list, res);
return res;
}
public void mute(int[] num, ArrayList<Integer> list,
ArrayList<ArrayList<Integer>> res) {
int n = num.length;
//数组中只剩一个值时,将该值放入链表中,得到的链表便为数组的一次排列
if (n == 1) {
list.add(num[0]);
ArrayList<Integer> newList = new ArrayList<>(list);
res.add(newList);
list.remove((Integer) num[0]);
return;
}
//数组中取一个值放入链表中,得到不包含当前值的数组,递归直到取出数组中的所有值
for (int i = 0; i < n; i++) {
int[] numTemp = new int[n - 1];
for (int j = 0, k = 0; k < n; k++) {
if (k != i) {
numTemp[j] = num[k];
j++;
}
}
list.add(num[i]);
mute(numTemp, list, res);
list.remove((Integer) num[i]);
}
}
}