[递归算法]组合
个人认为是最简单的算法设计了,核心算法如下:
public void comb(char[] list,int index, int number,int[] keys){
if(number==0){
for(int i=0;i<keys.length;i++)
System.out.print(list[keys[i]]);
System.out.println();
return;
}
for(;index<=list.length-number;index++){
keys[keys.length-number]=index;
comb(list,index+1,number-1,keys);
}
}
list是需要组合的list,index是每一层指向list的索引,number是需要抽取的数量,keys是索引表
很好懂,去掉对keys索引表的操作的话和打印操作的话,算法就3行:
public void comb(char[] list,int index, int number){
if(number==0) return;
for(;index<=list.length-number;index++)
comb(list,index+1,number-1,keys);
}
使用如下:
public static void main(String[] args){
char[] b={'a','b','c','d','e'};
int[] keys=new int[3];
comb(b, 0, 3,keys);
}
posted on 2013-07-18 01:08 TheKingOfKingFish 阅读(182) 评论(0) 编辑 收藏 举报