问题描述:假设字符串中所有的字符串都不重复,如何输出字符串的所有组合?例如,输入字符串“abc”,则输出a、b、c、ab、ac、bc、abc,共7种组合。
方法一:递归法
方法二:构造一个长度为n的01字符串(或二进制数)表示输出结果中是否包含某个字符。原题要求则变为输出“000”到“111”这2^n-1个组合对应的字符串。
方法一代码如下:
package com.haobi;
/*
* 如何输出字符串的所有组合?
* 方法一:递归
*/
public class Test8 {
public static void Combination(char[]c, int begin, int len, StringBuffer sb) {
//如果字符数组的长度为0,即为空。
if(len==0) {
System.out.print(sb+" ");//输出字符串组合
return;
}
//如果begin等于c.length,表示起始位置的元素是字符数组中最后一个元素
if(begin==c.length) {
return;
}
sb.append(c[begin]);//将起始元素存入字符串
//递归
Combination(c,begin+1,len-1,sb);
sb.deleteCharAt(sb.length()-1);
//递归
Combination(c,begin+1,len,sb);
}
public static void main(String[] args) {
String s = "abc";
char[] c = s.toCharArray();//String→char
StringBuffer sb = new StringBuffer(&#