题目:给出"abc",输出所有组合形式
package com.mjp.ai.dfs;
import com.google.common.collect.Lists;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* Author:m
* Date: 2023/04/07 19:00
*/
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 initIndex = 0;
recursion(result, sb, s.toCharArray(), initIndex);
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递归(index+1)
recursion(result, sb, charArray, i + 1);
// 3.3回溯(小容器去掉末尾那个元素)
sb.setLength(sb.length() - 1);
}
}
}