用递归法来实现字符集合的所有组合
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组合的子集。
字符串的排列:
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组合的子集。
相关文章推荐
- Java实现集合的组合(从组合中取出K个元素进行组合的所有情况)
- Java 组合的实现- 输入一个字符,输出字符中字母组成的所有组合
- 用JAVA编写一个算法实现对一个字符数组的所有元素的所有组合
- 生成集合的所有组合 - 递归法
- 请用Java实现一个算法:由a-z、0-9组成3位的字符密码,并打印所有可能的密码组合。
- LeetCodet题解--17. Letter Combinations of a Phone Number(所有数字键盘组合所对应的所有字符集合)
- 用递归实现从M个不同字符中选取N个字符的所有组合
- 编程题:输出字符集合的所有排列组合。
- Comparator 实现集合中元素的比较.输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这321323
- C# 简单的统计指定几个字符组合的所有结果
- 有一个纯字符串,编写一段代码,列出其所有字符的大小写组合 如 :字符串“ji”,字母组合['ji','jI','Ji','JI'] 即每个字符的大小写组合
- 找到B字符串在A字符串中出现的所有位置的集合
- 递归实现n个不同字符的所有全排列
- 组合(从长度为n的字符串中取m个字符)---java两种实现方法
- 所有集合类型整理(注:由于BitVector32未实现枚举接口,不计入)
- 小程序:递归实现所有变位词的排列组合
- 剑指offer:求字符的所有组合
- 3行代码实现从excel中读取出某列元素为所想要的元素集合中的所有行
- js替换字符串中所有指定的字符(实现代码)
- 题目描述:给定一个字符串,求出其所有可能的字符组合. 比如:abc 其所有组合是:a,b,c,ab,ac,bc,abc