您好,登錄后才能下訂單哦!
這篇文章主要介紹java如何實現排列組合算法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
java排列組合算法 [@more@] import java.util.ArrayList; import java.util.List; /** * 全排列組合算法 * @author mukeliang * 2009.10.21 */ public class TestComposite { public static void main(String[] args) { // List allList = getFirstData(); // List allList = getSecondData(); List allList = getThirdData(); List targetList = combinatePlan(allList); System.out.println(targetList); } /** * 進行組合排列 * @param sourceList * @return List */ private static List combinatePlan(List sourceList) { int[] subSizeArray; int[] subCountArray; int sourceCount = sourceList.size(); // 大list的長度 subSizeArray = new int[sourceCount]; subCountArray = new int[sourceCount];// 子list當前的值 int targetCount = 1; for (int i = 0; i < sourceCount; i++) { List subList = (List) sourceList.get(i); int size = subList.size(); subSizeArray[i] = size; // 存放每個子list的長度 targetCount *= size; // 最終要返回的list長度 subCountArray[i] = 0; // 從0開始 每個都是0 // a.println("subCountArray[i]:"+subCountArray[i]); } List targetList = new ArrayList(targetCount); // targetCount for (int i = 0; i < targetCount; i++) { // 記錄每個結果應該包含的元素個數 List targetSub = new ArrayList(sourceCount); for (int k = 0; k < sourceCount; k++) { int subIndex = subCountArray[k]; targetSub.add(((List) sourceList.get(k)).get(subIndex)); } addCount(subSizeArray, subCountArray); targetList.add(targetSub); } return targetList; } /** * 計算List下標: 總是先數最后一位,最后一位數到最大值以后進一位 * @param subSizeArray * @param subCountArray */ private static void addCount(int[] subSizeArray, int[] subCountArray) { // subCountArray數組的每個元素都是0 但是個數來記錄循環要取的位置 for (int i = subCountArray.length - 1; i >= 0; i--) { if (subCountArray[i] < subSizeArray[i] - 1) { subCountArray[i]++; return; } else { subCountArray[i] = 0; } } } /** * 組合結果: * list1下標 list2下標 * 0 0 * 0 1 * 0 2 * 1 0 * 1 1 * 1 2 * 2 0 * 2 1 * 2 2 * @return List */ private static List getFirstData(){ List list1 = new ArrayList(); list1.add("王一"); list1.add("王二"); list1.add("王三"); List list2 = new ArrayList(); list2.add("張一"); list2.add("張二"); list2.add("張三"); List allList = new ArrayList(); allList.add(list1); allList.add(list2); return allList; } /** * 組合結果: * list1下標 list2下標 list3下標 * 0 0 0 * 0 0 1 * 0 1 0 * 0 1 1 * 1 0 0 * 1 0 1 * 1 1 0 * 1 1 1 * @return List */ private static List getSecondData(){ List list1 = new ArrayList(); list1.add("王一"); list1.add("王二"); List list2 = new ArrayList(); list2.add("張一"); list2.add("張二"); List list3 = new ArrayList(); list3.add("劉一"); list3.add("劉二"); List allList = new ArrayList(); allList.add(list1); allList.add(list2); allList.add(list3); return allList; } /** * 組合結果: * list1下標 list2下標 * 0 0 * 1 0 * @return List */ private static List getThirdData(){ List list1 = new ArrayList(); list1.add("王一"); list1.add("王二"); List list2 = new ArrayList(); list2.add("張一"); List allList = new ArrayList(); allList.add(list1); allList.add(list2); return allList; } }
以上是“java如何實現排列組合算法”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。