输出字符串所有组合
描述
输入字符串"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
推荐阅读
- 一起来学习C语言的字符串转换函数
- 《深度倾听》第5天──「RIA学习力」便签输出第16期
- 列出所有自定义的function和view
- 幸福的人都是相似的,所有幸福的女人,都做好了这2点
- 字符串拼接成段落,换行符(\n)如何只执行n-1次
- 不理解句意,你还想做对所有GRE填空题()
- 你以为你熬过了所有的难熬的夜,却不知何时到白天
- 微小说/不是所有苦难都值得同情
- C语言的版本比较
- 再见,L