AcWing 51. 数字排列
原题链接
中等
代码,思路和yxc视频中讲的一样,只是因为Java引用调用的问题,挖坑的手法不一样
class Solution {
List<List<Integer>> ans = new ArrayList<>();
public List<List<Integer>> permutation(int[] nums) {
Arrays.sort(nums);
dfs(nums, 0, 0, 0, new int[nums.length]);
return ans;
}
public void dfs(int[] nums, int n, int start, int state, int[] path){
if(n == nums.length) {
List<Integer> t = new ArrayList<>();
for(int i:path){
t.add(i);
}
ans.add(t);
return;
}
if(n == 0 || nums[n] != nums[n - 1]) start = 0;
for(int i = start; i < nums.length; i++){
if( ((state >> i) & 1) == 0){
path[i] = nums[n];
dfs(nums, n + 1, i + 1, state + (1 << i), path);
}
}
}
}