1-n的全排列
public void permutation(int n,int[] arr,int cur){ if(cur==n){ System.out.println(Arrays.toString(arr)); return; } for(int i=1;i<=n;i++){ boolean ok=true; for(int j=0;j<cur;j++){ if(arr[j]==i) ok=false; } if(ok){ arr[cur]=i; permutation(n,arr,cur+1); } } }
可重集合的排列,
ublic void permutation(int[] nums,int[] arr,int cur){//nums有序 if(cur==nums.length){ System.out.println(Arrays.toString(arr)); return; } for(int i=0;i<nums.length;i++){ if(i>0&&nums[i]==nums[i-1]) continue; int c1=0; int c2=0; for(int j=0;j<cur;j++){ if(arr[j]==nums[i]) c1++; } for(int j=0;j<nums.length;j++){ if(nums[i]==nums[j]) c2++; } if(c1<c2){ arr[cur]=nums[i]; permutation(nums,arr,cur+1); } } }
3.不去重复元素
ArrayList<String> res=new ArrayList<String>(); public void swap(char[] s,int i,int j){ char ch=s[j]; s[j]=s[i]; s[i]=ch; } public void helper(char[] s,int cur){ int len=s.length; if(cur==len-1){ res.add(new String(s)); return; } for(int i=cur;i<len;i++){ swap(s,i,cur); helper(s,cur+1); swap(s,i,cur); } } public ArrayList<String> getPermutation(String A) { char[] s=A.toCharArray(); Arrays.sort(s); helper(s,0); Collections.sort(res); Collections.reverse(res); return res; }