您的位置:首页 > 其它

用递归法来实现字符集合的所有组合

2013-02-26 10:14 99 查看
假设我们想在长度为n的字符串中求m个字符的组合。我们先从头扫描字符串的第一个字符。针对第一个字符,我们有两种选择:一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;二是不把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选择m个字符。这两种选择都很容易用递归实现。

字符串的排列:

public static void combiantion(char chs[]){

if(chs.length == 0) return ;

Stack<Character> stack = new Stack<Character>();

for(int i = 1; i <= chs.length; i++){

combine(chs, 0, i, stack);

}

}

public static void combine(char []chs, int begin, int number, Stack<Character> stack){

if(number == 0){

System.out.println(stack.toString());

return ;

}

if(begin == chs.length){

return;

}

stack.push(chs[begin]);

combine(chs, begin + 1, number - 1, stack);

stack.pop();

combine(chs, begin + 1, number, stack);

}

对算法的分析:

combine的第二个参数表示要进栈的起点,第三个参数表示要进栈的个数;

首先让给定的begin字符进栈,接下来再让下一个字符进栈,根据number来判断;

出栈;

从下一个字符开始,找number组合的子集。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐