分太少写一个类,根据传入的数组,返回一维数组,就是可能的排列组合。 根据传入的一维数组,依次抽取其中元素,并把剩下的其他元素作为参数new成一个新类,把新类的组合结果累加。 其实是个嵌套循环package steeven; import java.util.ArrayList;public class Test { public java.util.ArrayList r; public Test(ArrayList in) { r = new ArrayList(); if (in.size()==1) r.add(in.get(0)); for (int i=0;i<in.size();i++){ ArrayList sub = (ArrayList)in.clone(); String s = (String)sub.remove(i); Test other = new Test(sub); for (int j=0;j<other.r.size();j++) r.add(s+(String)other.r.get(j)); } } public static void main(String[] args) { ArrayList a = new ArrayList(); a.add("a"); a.add("b"); a.add("c"); a.add("d"); Test test = new Test(a); for (int i=0;i<test.r.size();i++) if ((i+1)%(a.size()-1)==0) System.out.println(test.r.get(i).toString()); else System.out.print(test.r.get(i).toString()+","); } }
根据传入的一维数组,依次抽取其中元素,并把剩下的其他元素作为参数new成一个新类,把新类的组合结果累加。
其实是个嵌套循环package steeven;
import java.util.ArrayList;public class Test {
public java.util.ArrayList r;
public Test(ArrayList in) {
r = new ArrayList();
if (in.size()==1)
r.add(in.get(0));
for (int i=0;i<in.size();i++){
ArrayList sub = (ArrayList)in.clone();
String s = (String)sub.remove(i);
Test other = new Test(sub);
for (int j=0;j<other.r.size();j++)
r.add(s+(String)other.r.get(j));
}
}
public static void main(String[] args) {
ArrayList a = new ArrayList();
a.add("a");
a.add("b");
a.add("c");
a.add("d");
Test test = new Test(a);
for (int i=0;i<test.r.size();i++)
if ((i+1)%(a.size()-1)==0)
System.out.println(test.r.get(i).toString());
else
System.out.print(test.r.get(i).toString()+",");
}
}
abcd,abdc,acbdacdb,adbc,adcbbacd,badc,bcadbcda,bdac,bdcacabd,cadb,cbadcbda,cdab,cdbadabc,dacb,dbacdbca,dcab,dcba注意,上面的例子没优化