【代码随想录Day27】

Day 27 回溯算法03

今日任务

    1. 组合总和
  • 40.组合总和II
  • 131.分割回文串

代码实现

组合总和,直接套模板可解

 public List<List<Integer>> combinationSum(int[] candidates, int target) {
        backtracking(candidates, target, 0);
        return result;
    }

    void backtracking(int[] candidates, int target, int startIndex) {
        if (sum == target) {
            result.add(new ArrayList<>(path));
            return;
        }
        if (sum > target) {
            return;
        }
        for (int i = startIndex; i < candidates.length; i++) {
            path.add(candidates[i]);
            sum+=candidates[i];
            backtracking(candidates, target, i);
            sum-=candidates[i];
            path.remove(path.size() - 1);
        }
    }

组合总和II
这个就有点难,在模板之外要考虑怎么去重

public List<List<Integer>> combinationSum2(int[] candidates, int target) {
        Arrays.sort(candidates);
        backtracking2(candidates, target, 0, new boolean[candidates.length]);
        return result;
    }

    void backtracking2(int[] candidates, int target, int startIndex, boolean[] used) {
        if (sum == target) {
            result.add(new ArrayList<>(path));
            return;
        }
        if (sum > target) {
            return;
        }
        for (int i = startIndex; i < candidates.length; i++) {
            if (target - sum < candidates[i]) break;
            if ( i > 0 && candidates[i] == candidates[i - 1] && !used[i - 1]) {
                continue;
            }
            used[i] = true;
            path.add(candidates[i]);
            sum+=candidates[i];
            backtracking2(candidates, target, i + 1, used);
            used[i] = false;
            sum-=candidates[i];
            path.remove(path.size() - 1);
        }

    }

131.分割回文串
这个就太难了,模板还是那个模板,这里难以想到的是,当切割字符串的时候,从第二位开始,就相当于把第1、2位切割为一个字符,也就是说把startIndex当成切割线;至于解法中的动态规划部分,则完全不懂。

    public List<List<String>> partition(String s) {
        List<List<String>> result = new ArrayList<>();
        List<String> path = new ArrayList<>();
        backtracking(s, 0, result, path);
        return result;

    }

    void backtracking(String s, Integer startIndex, List<List<String>> result, List<String> path) {
        if (startIndex >= s.length()) {
            result.add(new ArrayList<>(path));
            return;
        }
        for (int i = startIndex; i < s.length(); i++) {
            String substring = s.substring(startIndex, i + 1);
            if (!isPalindrome(substring)) {
                continue;
            }
            path.add(substring);
            backtracking(s, i + 1, result, path);
            path.remove(path.size() - 1);
        }

    }

    public boolean isPalindrome(String s) {
        for (int i = 0; i < s.length()/2; i++) {
            if (s.charAt(i) != s.charAt(s.length() - i - 1)) {
                return false;
            }
        }
        return true;
    }

今日总结

  1. 有点难,但是模板依然可用,每个题里边都有难以想象到的难点
  2. 大数据?AI?有机会吗?
  3. 今天+2,希望再来两天,2024就回本啦

相关推荐

  1. 代码随想Day27

    2024-03-19 17:38:02       41 阅读
  2. 代码随想day27

    2024-03-19 17:38:02       42 阅读
  3. 代码随想day21

    2024-03-19 17:38:02       58 阅读
  4. 代码随想day24

    2024-03-19 17:38:02       37 阅读
  5. 代码随想Day24

    2024-03-19 17:38:02       42 阅读
  6. 代码随想Day29

    2024-03-19 17:38:02       41 阅读
  7. 代码随想day24

    2024-03-19 17:38:02       42 阅读
  8. 代码随想Day28

    2024-03-19 17:38:02       35 阅读

最近更新

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

    2024-03-19 17:38:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-19 17:38:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-19 17:38:02       82 阅读
  4. Python语言-面向对象

    2024-03-19 17:38:02       91 阅读

热门阅读

  1. VUE3 自定义指令

    2024-03-19 17:38:02       42 阅读
  2. Leetcode--198

    2024-03-19 17:38:02       39 阅读
  3. Spring--设计模式

    2024-03-19 17:38:02       32 阅读
  4. UGUI源码分析与研究1-UGUI底层的实现原理

    2024-03-19 17:38:02       34 阅读
  5. 阿里巴巴中国站按关键字搜索工厂数据 API

    2024-03-19 17:38:02       36 阅读
  6. python代码截取任意页的pdf

    2024-03-19 17:38:02       45 阅读
  7. 数组的reduce 的使用和扁平化处理

    2024-03-19 17:38:02       35 阅读
  8. 在事务里发送普通消息引起的线上问题

    2024-03-19 17:38:02       45 阅读
  9. C# 通信断线重连问题说明与示例

    2024-03-19 17:38:02       45 阅读
  10. Springboot AOP

    2024-03-19 17:38:02       43 阅读
  11. 在MATLAB中进行并行计算和GPU加速?

    2024-03-19 17:38:02       46 阅读
  12. fedora RTL8821CE 无线网卡驱动安装

    2024-03-19 17:38:02       45 阅读