[递归算法]组合

个人认为是最简单的算法设计了,核心算法如下:

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);
}

原文地址:https://www.cnblogs.com/imakoo/p/3197155.html