排列

  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;
    }

 

posted @ 2017-05-04 21:04  wqkant  阅读(134)  评论(0编辑  收藏  举报