输出字符串所有组合
2017-02-02 19:23
211 查看
描述
输入字符串"abc",则输出a、b、c、ab、ac、bc、abc 共7种组合。
分析
方法一,递归法。遍历每个字符串,每个字符两种情况取或不取。时间复杂度为O(n的2次方)。
方法二,根据每个字符只有取和不取两种情况,0表示不取,1表示取该字符,则原题可以解释为要求输001到111这个组合对应的字符串。
代码
方法一
方法二
输入字符串"abc",则输出a、b、c、ab、ac、bc、abc 共7种组合。
分析
方法一,递归法。遍历每个字符串,每个字符两种情况取或不取。时间复杂度为O(n的2次方)。
方法二,根据每个字符只有取和不取两种情况,0表示不取,1表示取该字符,则原题可以解释为要求输001到111这个组合对应的字符串。
代码
方法一
public class Test { /* * 递归 * */ public static void combinate(char[] chars,int begin,int len,StringBuffer sb){ if(len==0){ System.out.println(sb); return; } if(begin==chars.length) return; sb.append(chars[begin]); //取当前字符 combinate(chars,begin+1,len-1,sb); sb.deleteCharAt(sb.length()-1); //不取当前字符 combinate(chars,begin+1,len,sb); } public static void main(String[] args) { String str="abc"; char[] chars=str.toCharArray(); StringBuffer sb=new StringBuffer(); for(int i=1;i<=str.length();i++){ combinate(chars,0,i,sb); } } }
方法二
public class Test { public static void combinate(char[] c){ if(c==null) return; int len=c.length; boolean used[]=new boolean[len]; //默认值false; char cache[]=new char[len]; int result=len; while(true){ int index=0; while(used[index]){ used[index]=false; ++result; if(++index==len) return; } used[index]=true; cache[--result]=c[index]; System.out.print(new String(cache).substring(result)+" "); } } public static void main(String[] args) { String str="abc"; char[] c=str.toCharArray(); combinate(c); } }
相关文章推荐
- 读取一个字符串,并输出它里面字符的所有组合。
- 输入一个字符串,输出该字符串中字符的所有组合
- 输入一个字符串,输出该字符串中字符的所有组合。(腾讯2014笔试附加题)
- Swift - 排列组合之全排列 (输入一个字符串,输出该字符串包含的字符的所有组合)
- 输入一个字符串,输出该字符串中字符的所有组合
- 字符串之输出所有字母组合相同的单词
- 算法1(输出字符串的所有组合形式,例如 string s="abc" 输出所有形式 a,b,c,ab,bc,abc 可以与顺序无关)
- 题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。
- 给定一个字符串,输出所有的排列组合方式
- 输入一个字符串,输出该字符串中字符的所有组合 C#【总结】
- 输入字符串,输出字符串所有组合
- 输出字符串的所有全排列(递归法和非递归,非递归采用组合数学的字典序)
- 输入一个字符串,输出该字符串中字符的所有组合
- Java练习题-输入一个字符串,输出该字符串中字符的所有组合
- 递归问题之一:给定一字符串,输出字符串中所有字符子串的各种组合形式,长度为一个字符到字符串的长度,忽略排序
- 字符串的所有可能组合输出
- 输出该字符串中字符的所有组合
- 如何输出一个字符串的所有组合
- 【Java笔试题】输出字符串的所有组合
- 输出字符串所有组合(含有重复的字符)及输出其所有子串(含有重复的字符)