方法1:回溯
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> resList = new LinkedList<>();
backtracing(new LinkedList<>(), resList, nums);
return resList;
}
/**
* @param levelList 每一层的list用于收集
* @param resList 结果集
* @param nums seed nums
*/
private void backtracing(LinkedList<Integer> levelList, List<List<Integer>> resList, int[] nums) {
//当levelList的大小达到nums的大小,说明已经回溯结束了,开始收集
if (levelList.size() == nums.length) {
resList.add(new LinkedList<>(levelList));
return;
}
//以seed nums作为最基础的开始回溯
for (int i = 0; i < nums.length; i++) {
//如果levelList包含了nums[i]元素,说明这个元素这一层被回溯过,跳过
if (levelList.contains(nums[i])) continue;
levelList.add(nums[i]);//做出选择
backtracing(levelList, resList, nums);//进入下一层
levelList.remove(levelList.size() - 1);//回退选择
}
}