1. 程式人生 > >重複元素排列組合問題java簡單方法

重複元素排列組合問題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<List<Integer>>  removeDuplicate(List<List<Integer>> 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<Integer> 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;
    }