算法记录

10 阅读1分钟

纯记录,以备后续复习,不作教程

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);
        }

    }
}