重复元素排列组合问题java简单方法

**

例:现有黑、白、红三种颜色的小球各三个,需要将其排成一条直线,要求任意连续排列的三个小球不可以是同一种颜色,试求排列的方案共有多少种?

此类涉及重复元素的有一个简便方法。

  1. 所有元素全排列。,代码如下
 public static List<List<Integer>>  permutation(List<Integer> a) {  
        List<List<Integer>> res = new ArrayList<List<Integer>>();  
        int size = a.size();  
        List<Integer> temp = null;  
        if(size == 2) {  
            temp = new ArrayList<Integer>(2);  
            temp.add(a.get(0));  
            temp.add(a.get(1));  
            res.add(temp);  

            temp = new ArrayList<Integer>(2);  
            temp.add(a.get(1));  
            temp.add(a.get(0));  
            res.add(temp);  
        } else if(size > 2) {  
            List<List<Integer>> tempRes = null;  
            Integer firstNum = null;  
            List<Integer> tempPar = null;  
            for(int i=0; i<size; i++) {  
                firstNum = a.get(i);  
                tempPar = new ArrayList<Integer>(a);  
                tempPar.remove(i);  
                tempRes = cal(tempPar);  
                if(tempRes != null && tempRes.size() > 0) {  
                    for (List<Integer> intList : tempRes) {  
                        intList.add(0, firstNum);  
                        res.add(intList);  
                    }  
                }  

            }  
        }  

        return res;  
    }  

2.重复元素去重
方法一

public   static   List>  removeDuplicate(List> list)  {       
      for  ( int  i  =   0 ; i  <  list.size()  -   1 ; i ++ )  {       
          for  ( int  j  =  list.size()  -   1 ; j  >  i; j -- )  {       
               if  (list.get(j).equals(list.get(i)))  {       
                  list.remove(j);       
                }        
            }        
          }        
        return list;       
    } 

**
方法二

 List<List<Integer>> resList = permutation (a); 
        List<List<Integer>> newres = new ArrayList<List<Integer>>();
        for(List<Integer> l : resList){
            if(!newres.contains(l)){
                newres.add(l);
            }
        }

方法三
用set去重。

3.找出符合条件的
1.list转换成数组

  for (List intList : newlist) {
            Object[] arr =new String[9];//list转换为数组
            arr = (Object[])intList.toArray();

2.控制条件

    public static boolean check(Object[] arr){
        if((arr[0].equals(arr[1])&&arr[0].equals(arr[2]))||(arr[1].equals(arr[2])&&arr[1].equals(arr[3]))||(arr[2].equals(arr[3])&&arr[2].equals(arr[4]))||(arr[3].equals(arr[4])&&arr[3].equals(arr[5]))||(arr[4].equals(arr[5])&&arr[4].equals(arr[6]))||(arr[5].equals(arr[6])&&arr[5].equals(arr[7]))||(arr[6].equals(arr[7])&&arr[6].equals(arr[8]))){
            return false;
        }
        else return true;
    }

你可能感兴趣的:(代码大全,java)