列出字符串所有组合
来源:互联网 发布:知伯地黄丸 编辑:程序博客网 时间: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()); } }}