代码随想录Day29

Day 29 回溯算法part05

今日任务

  • 491.递增子序列
  • 46.全排列
  • 47.全排列 II

代码实现

491.递增子序列

 public List<List<Integer>> findSubsequences(int[] nums) {
        List<List<Integer>> result = new ArrayList<>();
        List<Integer> path = new ArrayList<>();
        backtracking(nums, 0, path, result);
        return result;
    }

    void backtracking(int[] nums, int startIndex, List<Integer> path, List<List<Integer>> result) {
        if (path.size() > 1) {
            result.add(new ArrayList<>(path));
        }
        HashSet<Integer> set = new HashSet<>();

        for (int i = startIndex; i < nums.length; i++) {
            if ((path.size() > 0 && nums[i] < path.get(path.size() - 1)) || set.contains(nums[i])) {
                continue;
            }
            set.add(nums[i]);
            path.add(nums[i]);
            backtracking(nums, i + 1, path, result);
            path.remove(path.size() - 1);
        }
    }

46.全排列
这里我没有用标记已使用的方法,而是用path.contains判断,结果到下一道题就行不通了

 public List<List<Integer>> permute(int[] nums) {
        List<List<Integer>> result = new ArrayList<>();
        List<Integer> path = new ArrayList<>();
        backtracking(nums, path, result);
        return result;
    }

    void backtracking(int[] nums, List<Integer> path, List<List<Integer>> result) {
        if (path.size() == nums.length) {
            result.add(new ArrayList<>(path));
            return;
        }
        for (int num : nums) {
            if (path.contains(num)) {
                continue;
            }
            path.add(num);
            backtracking(nums, path, result);
            path.remove(path.size() - 1);
        }
    }

47.全排列 II
重点在于如何去重,可以通过排序+used数组去重

 public List<List<Integer>> permuteUnique(int[] nums) {
        List<List<Integer>> result = new ArrayList<>();
        List<Integer> path = new ArrayList<>();
        boolean[] used = new boolean[nums.length];
        backtracking1(nums, path, result, used);
        return result;
    }

    void backtracking1(int[] nums, List<Integer> path, List<List<Integer>> result, boolean[] used) {
        if (path.size() == nums.length) {
            result.add(new ArrayList<>(path));
            return;
        }
        HashSet<Integer> set = new HashSet<>();
        for (int i = 0; i < nums.length; i++) {
            if (used[i] || set.contains(nums[i])) {
                continue;
            }
            set.add(nums[i]);
            used[i] = true;
            path.add(nums[i]);
            backtracking1(nums, path, result, used);
            path.remove(path.size() - 1);
            used[i] = false;
        }

    }

今日总结

  1. 这里有两种去重方式,一种是通过used数组去重,这种方法的关键是数组需要排序,还有一种是在for循环中用一个set去重;去重的关键是要分清树枝去重和树层去重,for循环代表一层,递归代表往下;
  2. 因为有公式的存在,很多题其实想不太明白,只是套公式,然后根据用例通不过的地方去修改,就解决了,而对于回溯本身想的不是很清楚,递归本身也比较抽象;
  3. 今天小绿,又追高了,真是愚蠢
  4. 另外,听说最近工作不好找,我还是得试试啊。

相关推荐

  1. 代码随想Day29

    2024-03-21 06:56:01       21 阅读
  2. 代码随想day21

    2024-03-21 06:56:01       31 阅读
  3. 代码随想day24

    2024-03-21 06:56:01       24 阅读
  4. 代码随想Day24

    2024-03-21 06:56:01       21 阅读
  5. 代码随想Day27

    2024-03-21 06:56:01       18 阅读
  6. 代码随想day27

    2024-03-21 06:56:01       16 阅读
  7. 代码随想day24

    2024-03-21 06:56:01       22 阅读
  8. 代码随想Day28

    2024-03-21 06:56:01       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-21 06:56:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-21 06:56:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-21 06:56:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-21 06:56:01       20 阅读

热门阅读

  1. Vue3 v-model的使用

    2024-03-21 06:56:01       17 阅读
  2. 谈谈对跨站请求伪造(CSRF)的理解及其防御措施

    2024-03-21 06:56:01       20 阅读
  3. Linux查看8080端口是否启用

    2024-03-21 06:56:01       23 阅读
  4. 【Docker】Docker的常用命令知多少?

    2024-03-21 06:56:01       24 阅读
  5. @click 和 v-on:click 的区别

    2024-03-21 06:56:01       20 阅读
  6. 【积累】string和list

    2024-03-21 06:56:01       23 阅读
  7. 【积累】list

    2024-03-21 06:56:01       25 阅读
  8. 每日一题 第十六期 Codeforces Round 911 (Div. 2)

    2024-03-21 06:56:01       20 阅读
  9. dataGridView 绑定List 显示内容不刷新

    2024-03-21 06:56:01       21 阅读