字符串全组合

来源:互联网 发布:unity3d手机游戏大全 编辑:程序博客网 时间:2024/06/11 01:56

输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入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);    }}