输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。
假设我们想在长度为n的字符串中求m个字符的组合。我们先从头扫描字符串的第一个字符。针对第一个字符,我们有两种选择:一是把这个字符放到组合中 去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;二是不把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选择m个字符。这两种 选择都很容易用递归实现。
package zifuchuan; import java.util.*; /** * Created by wuxiaosi on 2017/9/17. */ public class QuanZuHe { public static void main(String[] args){ char[] s = {'a','b','c'}; combination(s); } public static void combination(char[] s){ if(s==null||s.length==0){ return ; } List<Character> list = new ArrayList(); for(int i=1;i<=s.length;i++){ combine(s,0,i,list); } } //从字符数组中第begin个字符开始挑选number个字符加入list中 public static void combine(char[] s,int begin,int number,List<Character> list){ if(number ==0){ System.out.println(list.toString()); return; } if(begin==s.length) return; list.add(s[begin]); combine(s,begin+1,number-1,list); list.remove((Character)s[begin]); combine(s,begin+1,number,list); } }