java:
回溯
- class Solution {
- boolean[] vis;
- public List<List<Integer>> permuteUnique(int[] nums) {
- List<List<Integer>> ans = new ArrayList<>();
- List<Integer> list = new ArrayList<>();
- Arrays.sort(nums);
- vis = new boolean[nums.length];
- bt(nums, ans, list, 0);
- return ans;
- }
- public void bt(int[] nums, List<List<Integer>> ans, List<Integer> list, int flag){
- if(flag == nums.length){
- ans.add(new ArrayList<Integer>(list));
- return;
- }
- for(int i = 0; i < nums.length; i ++){
- if(vis[i] || (i > 0 && nums[i] == nums[i - 1] && !vis[i - 1])) continue;
- list.add(nums[i]);
- vis[i] = true;
- bt(nums, ans, list, flag + 1);
- vis[i] = false;
- list.remove(flag);
- }
- }
- }