hot100 | 十、回溯

1-leetcode46. 全排列

注意:×

  1. 看了两遍以后还是犯了错误:在将trace赋值给res的时候,一定要注意是新创建一个数组而不是直接将数组给进去,直接给的话是浅拷贝,最后会全是[]
  2. 接下来是注意的地方,要注意回溯的函数是包含nums, trace, used
  3. 用的是LinkedList因为需要频繁的对数组的最后进行删减
    List<List<Integer>> res = new LinkedList<>();
    public List<List<Integer>> permute(int[] nums) {
        boolean[] used = new boolean[nums.length];
        LinkedList<Integer> trace = new LinkedList<>();
        backtrace(nums, trace, used);
        return res;
    }

    private void backtrace(int[] nums, LinkedList<Integer> trace, boolean[] used) {
        if (trace.size() == nums.length){
            res.add(new LinkedList<>(trace));
            return;
        }
        for (int i = 0; i < nums.length; i++) {
            if (used[i]){
                continue;
            }
            used[i] = true;
            trace.add(nums[i]);
            backtrace(nums, trace, used);
            trace.removeLast();
            used[i] = false;
        }
    }

2-leetcode78. 子集

注意:×

  1. 非常好的看完题解一趟过,注意子集问题中的回溯需要nums, 0
    List<List<Integer>> res = new LinkedList<>();
    LinkedList<Integer> trace = new LinkedList<>();
    public List<List<Integer>> subsets(int[] nums) {
        backtrace(nums, 0);
        return res;
    }

    private void backtrace(int[] nums, int start) {
        res.add(new LinkedList<>(trace));

        for (int i = start; i< nums.length; i++){
            trace.add(nums[i]);
            backtrace(nums, i+1);
            trace.removeLast();
        }
    }

3-leetcode17. 电话号码的字母组合

注意:×

  1. String[]的写法
  2. StringBuild的使用
  3. 主要还是backtrace里面的对digits的下标控制
    List<String> res = new LinkedList<>();
    StringBuilder sb = new StringBuilder();
    String[] map = new String[]{"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};

    public List<String> letterCombinations(String digits) {
        if (digits.isEmpty()){
            return res;
        }

        backtrace(digits, 0);
        return res;
    }

    private void backtrace(String digits, int start) {
        if (sb.length() == digits.length()){
            res.add(sb.toString());
            return;
        }

        int index = digits.charAt(start) - '0';
        for (char c : map[index].toCharArray()){
            sb.append(c);
            backtrace(digits, start+1);
            sb.deleteCharAt(sb.length()-1);
        }
    }

leetcode

注意:√×


8-leetcode51. N 皇后

注意:×

  1. 垃圾玩意,不写也罢

相关推荐

  1. hot100 | 回溯

    2024-07-12 19:00:01       22 阅读
  2. Python题解Leetcode Hot100回溯

    2024-07-12 19:00:01       17 阅读
  3. LeetCode Hot100 回顾(三)

    2024-07-12 19:00:01       36 阅读
  4. hot100

    2024-07-12 19:00:01       16 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 19:00:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 19:00:01       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 19:00:01       58 阅读
  4. Python语言-面向对象

    2024-07-12 19:00:01       69 阅读

热门阅读

  1. Eureka: Netflix开源的服务发现框架

    2024-07-12 19:00:01       19 阅读
  2. Gradle 介绍

    2024-07-12 19:00:01       16 阅读
  3. tomcat

    2024-07-12 19:00:01       15 阅读
  4. 【jxls 单元格合并】

    2024-07-12 19:00:01       16 阅读
  5. 基于Hadoop的区块链海量数据存储的设计与实现

    2024-07-12 19:00:01       21 阅读
  6. 1 HTML and CSS

    2024-07-12 19:00:01       19 阅读
  7. 通用脚本大全

    2024-07-12 19:00:01       20 阅读
  8. c#猜数字小游戏

    2024-07-12 19:00:01       22 阅读
  9. TCP/IP模型和OSI模型的区别

    2024-07-12 19:00:01       18 阅读
  10. 补充一下MySQL的索引用法及应用场景

    2024-07-12 19:00:01       21 阅读
  11. LeetCode //C - 213. House Robber II

    2024-07-12 19:00:01       23 阅读
  12. 云WAF如何帮助政府网络进行安全防御

    2024-07-12 19:00:01       21 阅读