根据数组,生成数组中元素的所有组合
package test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* 生成
* @author Administrator
*
*/
public class ColonTest {
/**
* 考虑顺序,即顺序不一样,对象就不一样
* @param candidate
* @param prefix
*/
private static void withSequenceCompose(List<String> candidate,String prefix){
System.out.println(prefix);
for(int i=0;i<candidate.size();i++){
List<String> temp = new ArrayList<String>(candidate);
withSequenceCompose(temp,prefix+temp.remove(i));
}
}
/**
* 不考虑顺序,只生产包含不一样元素的数组
* @param candidate
* @param prefix
* @param index
*/
public static void noSequenceCompose(List<String> candidate, String prefix,int index) {
System.out.println(prefix);
for(int i=index;i<candidate.size();i++) {
List<String> tmp = new ArrayList<String>(candidate);
noSequenceCompose(tmp, prefix + tmp.remove(i),i);
}
}
public static void main(String[] args){
String[] strArray = {"1","2","3"};
List<String> strList = Arrays.asList(strArray);
System.out.println("忽略顺序 ====================");
noSequenceCompose(strList,"",0);
System.out.println("\n\n考虑顺序 ====================");
withSequenceCompose(strList,"");
}
}
执行结果
忽略顺序 ====================
1
12
123
13
2
23
3
考虑顺序 ====================
1
12
123
13
132
2
21
213
23
231
3
31
312
32
321