您的位置:首页 > 其它

输出字符串所有组合

2017-02-02 19:23 211 查看
描述

输入字符串"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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐