输入字符串,输出所有的组合,比如输入abc,输出 a b c ab ac bc abc。
题目解法:abc用01串表示,001表示输出c,111表示输出abc,解法如下。。。空间复杂度n,时间复杂度为2^n-1,因为有这么多种结果啊。。。
package combination;
/**
*
* @author Administrator
* 输出所有的组合,比如输入abc,输出 a b c ab ac bc abc
*
* boolean初始化默认为false,
*/
public class Combination {
public static void combination(char[] cs) {
int len = cs.length;
boolean[] choosed = new boolean[len];
char[] cache = new char[len];
int result = len;
int index = 0;
while(true) {
index = 0;
while (choosed[index]) {
choosed[index] = false;
++result;
if (++index == len) {
return;
}
}
choosed[index] = true;
cache[--result] = cs[index];
System.out.println(new String(cache).substring(result) + " ");
}
}
public static void main(String[] args) {
String sourceString = "abc&#