剑指offer:字符串的组合(java)
2016-10-04 15:51
267 查看
字符串的组合:
给一个字符串,比如ABC, 把所有的组合,即:A, B, C, AB, AC, BC, ABC, 都找出来。
解题思路:
假设我们想在长度为n的字符串中求m个字符的组合。我们先从头扫描字符串的第一个字符。针对第一个字符,我们有两种选择:一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;二是不把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选择m个字符。这两种选择都很容易用递归实现。
给一个字符串,比如ABC, 把所有的组合,即:A, B, C, AB, AC, BC, ABC, 都找出来。
解题思路:
假设我们想在长度为n的字符串中求m个字符的组合。我们先从头扫描字符串的第一个字符。针对第一个字符,我们有两种选择:一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;二是不把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选择m个字符。这两种选择都很容易用递归实现。
public static void combine(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); } } //从字符数组中第begin个字符开始挑选number个字符加入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); }
相关文章推荐
- 剑指Offer面试题28(java版):字符串的排列
- 【剑指offer-Java版】49把字符串转换为整数
- 剑指offer面试题54 表示数字的字符串(java实现)
- 剑指offer-表示数值的字符串-java
- 剑指Offer 面试题20:表示数值的字符串 Java代码实现
- 剑指Offer面试题42(Java版):反转单词顺序VS左旋转字符串
- 【剑指offer】字符串的组合
- java 剑指offer 第二题:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
- 【剑指offer】字符串的组合
- 剑指offer-左旋转字符串-java
- 【剑指offer-Java版】28字符串的排列
- 剑指Offer 28题 字符串的排列 Java版
- 剑指offer----左旋转字符串----java实现
- 【剑指offer】面试题:求字符串的所有组合
- 剑指offer————字符串组合扩展题目立方体放数问题
- 【剑指offer-Java版】42翻转单词顺序VS左旋转字符串
- 剑指offer:字符串的排列(java)
- 剑指Offer 42题 左旋转字符串 Java版
- java 剑指offer 第二题:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
- 剑指offer中 与数组、字符串有关的编程练习题 Java编码