输入描述
abc
输出描述
a
b
c
ab
ac
bc
abc
public class Abc {
public static void main(String[] args) {
String s = "abc";
List<String> res = dfs(s);
res = res.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList());
System.out.println(res);
}
private static List<String> dfs(String s) {
if (StringUtils.isBlank(s)) {
return Lists.newArrayList();
}
if (s.length() == 1) {
return Lists.newArrayList(s);
}
List<String> result = Lists.newArrayList();
StringBuilder sb = new StringBuilder();
int index = 0;
recursion(result, sb, s.toCharArray(), index);
return result;
}
private static void recursion(List<String> result, StringBuilder sb, char[] charArray, int startIndex) {
// 1.终止条件
// 2.大集合添加小容器元素
result.add(sb.toString());
// 3.for循环
for (int i = startIndex; i < charArray.length; i++) {
// 3.1元素添加到小容器
sb.append(charArray[i]);
// 3.2递归(组合类i+1)
recursion(result, sb, charArray, i + 1);
// 3.3回溯(小容器去掉末尾那个元素)
sb.setLength(sb.length() - 1);
}
}
}