解题思路
回溯法,YYDS
基本思想是暴力穷举,但是精髓在于当一个情况符合要求后,需要进行恢复的操作,在这道题中,比如1->2->3这条路走过了,那么我们要将路线变成1->2,再变成1,这样才能继续走1->3这一条路径
代码
class Solution {
List<List<Integer>> ans;
public List<List<Integer>> permute(int[] nums) {
ans = new ArrayList<>();
LinkedList<Integer> list = new LinkedList<>();
backtrack(list,nums);
return ans;
}
public void backtrack(LinkedList<Integer> list, int[] nums){
if (list.size()==nums.length){
ans.add(new LinkedList<>(list));
return;
}
for (int i=0;i<nums.length;i++){
if (list.contains(nums[i])){
continue;
}
list.add(nums[i]);
backtrack(list,nums);
list.removeLast();
}
}
}