46. 全排列
思路: 肯定是回溯算法,当递归深度 == 数组长度时,说明所有数字都已经使用完了。但是需要加一个used数组,表示当前位置的数字已经使用过,避免出现重复数据
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
boolean[] used = new boolean[nums.length];
recall(nums,0,res , new ArrayList<>(),used);
return res;
}
public void recall(int[] nums ,int dept , List<List<Integer>> res , List<Integer> arr , boolean[]used){
if(dept == nums.length){
res.add(new ArrayList(arr));
}
for(int i = 0 ;i < nums.length ; i++){
if(!used[i]){
arr.add(nums[i]);
used[i] = true ;
recall(nums,dept+1 , res , arr , used);
used[i] = false;
arr.remove(arr.size() -1);
}
}
}
}