纯记录,以备后续复习,不作教程
1.求数组所有组合
[123] = 1,2,3,12,13,23,123
public class ALG {
public static void main(String[] args) {
List<Integer> list = Lists.newArrayList(1, 2, 3, 4, 5);
Map<String, Integer> map = new HashMap<>();
StringBuilder sb = new StringBuilder();
// 以每个数字开始
for (int i = 0; i < list.size(); i++) {
dfs(list, map, sb, i);
}
}
private static void dfs(List<Integer> list, Map<String, Integer> map, StringBuilder sb, int cur) {
String str = sb.toString();
// 未曾记录过则显示
if (!str.isEmpty() && map.get(str) == null) {
System.out.println(str);
map.put(str, 1);
}
if (cur == list.size()) {
return;
}
for (int i = cur; i < list.size(); i++) {
// 添加
sb.append(list.get(i));
// 继续往下走
dfs(list, map, sb, i + 1);
// 回溯状态,不要影响其他组合
sb.deleteCharAt(sb.length() - 1);
}
}
}