题目描述:
给定一个没有重复数字的序列,返回其所有可能的全排列。
解题思路:
- 典型的回溯法解题思想
- 给定一个列表,将数组中的数字加入该列表中,一旦列表的大小等于数组的长度时,保存该列表作为数组的一个排列
- 同时添加过的数字要给一个标签,说明已加入该列表
-
当列表大小等于数组长度时,保存的同时,需要回退,同时将该数字的标志置为未访问
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> list = new ArrayList<>();
boolean[] dp = new boolean[nums.length];
backtrack(list,new ArrayList<>(),nums,dp);
return list;
}
public void backtrack(List<List<Integer>> list,List<Integer> temp,int[] nums,boolean[] dp){
if(temp.size() == nums.length){
list.add(new ArrayList<Integer>(temp));
return;
}
for(int i = 0;i<nums.length;i++){
if(dp[i] == true)
continue;
dp[i] = true;
temp.add(nums[i]);
backtrack(list,temp,nums,dp);
temp.remove(temp.size()-1);
dp[i] = false;
}
}
}