输出字符串所有组合

描述
输入字符串"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); } }


转载于:https://www.cnblogs.com/zadomn0920/p/6361498.html

    推荐阅读