标签:
1.Given a collection of numbers, return all possible permutations.
For example,[1,2,3]
have the following permutations:[1,2,3]
, [1,3,2]
, [2,1,3]
, [2,3,1]
, [3,1,2]
, and [3,2,1]
.
2.
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,[1,1,2]
have the following unique permutations:[1,1,2]
, [1,2,1]
, and [2,1,1]
.
solution:DFS
1 2 3
12 13 21 23 32 31
123 132 213 231 321 312
package leetcode2; import java.util.*; public class Permutations { public static ArrayList<ArrayList<Integer>> permute(int[] num) { ArrayList<ArrayList<Integer>> res=new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> mem =new ArrayList<Integer>(); int deep=0; int length=num.length; boolean visit[]=new boolean[length]; dfs(res,mem,deep,num,visit,length); return res; } public static void dfs(ArrayList<ArrayList<Integer>> res, ArrayList<Integer> mem, int deep, int[] num,boolean[] visit,int l) { // TODO Auto-generated method stub if(deep==l){ if(!res.contains(new ArrayList<Integer>(mem))){ res.add(new ArrayList<Integer>(mem)); } return; } if(deep<l){ for(int i=0;i<l;i++){ if(i>0 && num[i-1] == num[i] && !visit[i-1]) continue; if(!visit[i]){ mem.add(num[i]); visit[i]=true; dfs(res,mem,deep+1,num,visit,l); if(mem.size()>0){ mem.remove(mem.size()-1); visit[i]=false; } } } } if(deep>num.length) return; } public static void main(String[] args) { // TODO Auto-generated method stub int[] a={1,2,3}; System.out.print(permute(a)); } }
标签:
原文地址:http://www.cnblogs.com/joannacode/p/4395875.html