递归每次从数组中取一个值放入链表中,直到数组中的值全部放在链表中,链表即为数组的一次排列,遍历即可 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]);
    }
}

}