列出字符串所有组合

来源:互联网 发布:知伯地黄丸 编辑:程序博客网 时间:2024/05/18 09:20
import java.math.BigInteger;import java.util.*;import java.io.*;public class Demo {    private int[] a;    private BigInteger numLeft;    private BigInteger total;    public Demo(int n) {        if (n < 1) {            throw new IllegalArgumentException("Min 1");        }        a = new int[n];        total = getFactorial(n);        reset();    }    public void reset() {        for (int i = 0; i < a.length; i++) {            a[i] = i;        }        numLeft = new BigInteger(total.toString());    }    public BigInteger getNumLeft() {        return numLeft;    }    public BigInteger getTotal() {        return total;    }    public boolean hasMore() {        return numLeft.compareTo(BigInteger.ZERO) == 1;    }    private static BigInteger getFactorial(int n) {        BigInteger fact = BigInteger.ONE;        for (int i = n; i > 1; i--) {            fact = fact.multiply(new BigInteger(Integer.toString(i)));        }        return fact;    }    public int[] getNext() {        if (numLeft.equals(total)) {            numLeft = numLeft.subtract(BigInteger.ONE);            return a;        }        int temp;        // Find largest index j with a[j] < a[j+1]        int j = a.length - 2;        while (a[j] > a[j + 1]) {            j--;        }        // Find index k such that a[k] is smallest integer        // greater than a[j] to the right of a[j]        int k = a.length - 1;        while (a[j] > a[k]) {            k--;        }        // Interchange a[j] and a[k]        temp = a[k];        a[k] = a[j];        a[j] = temp;        // Put tail end of permutation after jth position in increasing order        int r = a.length - 1;        int s = j + 1;        while (r > s) {            temp = a[s];            a[s] = a[r];            a[r] = temp;            r--;            s++;        }        numLeft = numLeft.subtract(BigInteger.ONE);        return a;    }//程序测试入口    public static void main(String[] args) {        int[] indices;        String[] elements = {"喔", "呼", "喂", "完", "哇", "哈"};        Demo x = new Demo(elements.length);        StringBuffer permutation;File file = new File("1.txt");PrintStream ps = null;try{ps = new PrintStream(file);}catch (Exception e){e.printStackTrace();}System.setOut(ps);        while (x.hasMore())         {            permutation = new StringBuffer("%");            indices = x.getNext();            for (int i = 0; i < indices.length; i++) {                permutation.append(elements[indices[i]]).append("%");            }//输出到1.txt文件中            System.out.println(permutation.toString());        }    }}

原创粉丝点击