Leetcode之回溯法专题-47. 全排列 II(Permutations II)
Leetcode之回溯法专题-47. 全排列 II(Permutations II)
给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ]
分析:跟46题一样,只不过加了一些限制(包含了重复数字)。
AC代码(时间复杂度比较高,日后二刷的时候改进):
class Solution { List<List<Integer>> ans = new ArrayList<>(); int vis[] = null; public List<List<Integer>> permuteUnique(int[] nums) { vis = new int[nums.length]; Arrays.fill(vis,0); dfs(nums,0,new ArrayList<Integer>()); return ans; } public void dfs(int nums[],int position,ArrayList<Integer> tmp){ if(position>nums.length-1){ if(tmp.size()==nums.length && ans.contains(tmp)!=true){ ans.add(new ArrayList<>(tmp)); } return; } for(int i=0;i<nums.length;i++){ if(vis[i]==1) continue; vis[i] = 1; tmp.add(nums[i]); dfs(nums,position+1,tmp); tmp.remove(tmp.size()-1); vis[i] = 0; } } }
作者:秦羽纶
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.