java实现排列组合算法
??? ??? ??? //}
??? ??? }
??? ??? System.out.println("total:"+comb.getCombList().size());
??? ???
??? ??? comb.pp(10,1);
??? ??? comb.pp(10,2);
??? ??? comb.pp(10,3);
??? ??? comb.pp(10,4);
??? ??? comb.pp(10,5);
??? ??? comb.pp(10,6);
??? ??? comb.pp(10,7);
??? ??? comb.pp(10,8);
??? ??? comb.pp(10,9);??? ???
??? }
}
?
2、排列
package com.ubs.is;
import java.util.ArrayList;
public class Arrange {
??? private int total = 0;
??? private ArrayList<String> arrangeList = new ArrayList<String>();
??? public Arrange() {
??? }
??? private void swap(String list[], int k, int i) {
??? ??? String c3 = list[k];
??? ??? list[k] = list[i];
??? ??? list[i] = c3;
??? }
??? public void perm(String list[], int k, int m) {
??? ??? if (k > m) {
??? ??? ??? StringBuffer sb = new StringBuffer();
??? ??? ??? for (int i = 0; i <= m; i++) {
??? ??? ??? ??? sb.append(list[i]).append(",");
??? ??? ??? }
??? ??? ??? if (sb.length() > 0) {
??? ??? ??? ??? sb.setLength(sb.length() - 1);
??? ??? ??? }
??? ??? ??? arrangeList.add(sb.toString());
??? ??? ??? total++;
??? ??? } else {
??? ??? ??? for (int i = k; i <= m; i++) {
??? ??? ??? ??? swap(list, k, i);
??? ??? ??? ??? perm(list, k + 1, m);
??? ??? ??? ??? swap(list, k, i);
??? ??? ??? }
??? ??? }
??? }
??? public int getTotal() {
??? ??? return total;
??? }
??? public ArrayList<String> getArrangeList() {
??? ??? return arrangeList;
??? }
??? public static void main(String args[]) {
??? ??? String list[] = { "1", "2", "3", "4", "5" };
??? ??? Arrange ts = new Arrange();
??? ??? ts.perm(list, 0, list.length - 1);
??? ??? for (int i = 0; i < ts.getArrangeList().size(); i++) {
??? ??? ??? System.out.println(ts.getArrangeList().get(i));
??? ??? }
??? ??? System.out.println("total:" + ts.total);
??? }
}
3、调用
package com.ubs.is;
import java.util.ArrayList;
public class ArrangeCombine {
??? public static ArrayList<String> getArrangeOrCombine(String[] args, int n,
??? ??? ??? boolean isArrange) throws Exception {
??? ??? if (args.length <= 0) {
??? ??? ??? throw new Exception("array.length<=0");
??? ??? }
??? ??? if (n > args.length) {
??? ??? ??? throw new Exception(" n>array.length");
??? ??? }
??? ??? Combination comb = new Combination();
??? ??? comb.mn(args, n);
??? ??? if (!isArrange) {
??? ??? ??? return comb.getCombList();
??? ??? }
??? ??? ArrayList<String> arrangeList = new ArrayList<String>();
??? ??? for (int i = 0; i < comb.getCombList().size(); i++) {
??? ??? ??? String[] list = comb.getCombList().get(i).split(",");
??? ??? ??? Arrange ts = new Arrange();
??? ??? ??? ts.perm(list, 0, list.length - 1);
??? ??? ??? for (int j = 0; j < ts.getArrangeList().size(); j++) {
??? ??? ??? ??? arrangeList.add(ts.getArrangeList().get(j));
??? ??? ??? }
??? ??? }
??? ??? return arrangeList;
??? }???
}