当前位置: 首页 > article >正文

408算法题leetcode--第30天

40. 组合总和 II

题目地址:40. 组合总和 II - 力扣(LeetCode)

题解思路:回溯

时间复杂度:O(n * 2n),n个数,每个数考虑选or不选(2n)

空间复杂度:O(n)

代码:

class Solution {
public:
    vector<vector<int>>ret;
    vector<int>arr;

    void backtrack(vector<int>& candidates, int target, int sum, int start){
        if(sum > target){
            return ;
        }
        if(sum == target){
            ret.push_back(arr);
            return ;
        }
        int size = candidates.size();
        for(int i = start; i < size; i++){
            // 要对同一树层使用过的元素进行跳过
            // 有序数组,从start开始的相同元素是同一分支的
            if (i > start && candidates[i] == candidates[i - 1]) {
                continue;
            }
            arr.push_back(candidates[i]);
            backtrack(candidates, target, sum + candidates[i], i + 1);
            arr.pop_back();
        }
    }

    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
        sort(candidates.begin(), candidates.end());
        backtrack(candidates, target, 0, 0);
        return ret;
    }
};

131. 分割回文串

题目地址:131. 分割回文串 - 力扣(LeetCode)

题解思路:如注释

时间复杂度:O(n * 2n),n个数,每个数考虑选or不选(2n)

空间复杂度:O(n^2)

代码:

class Solution {
public:
    vector<vector<string>>ret;
    vector<string>arr;

    bool isPalindrome(string& str, int start, int end){
        for(int i = start, j = end; i < j; i++, j--){
            if(str[i] != str[j]){
                return false;
            }
        }
        return true;
    }

    void backtrack(string& s, int start){
        if(start >= s.size()){
            ret.push_back(arr);
            return ;
        }
        int size = s.size();
        for(int i = start; i < size; i++){
            // 子串
            if(isPalindrome(s, start, i)){
                string str = s.substr(start, i - start + 1);
                arr.push_back(str);
                backtrack(s, i + 1);
                arr.pop_back();
            }
        }
    }
    vector<vector<string>> partition(string s) {
        // 回溯 + 判断回文串
        backtrack(s, 0);
        return ret;
    }
};

http://www.kler.cn/news/343021.html

相关文章:

  • 97. UE5 GAS RPG 实现闪电链技能(二)
  • 项目常用版本控制管理工具
  • Nacos 2.2.x版本配置详解(鉴权版本)
  • 【VUE】Vue3中的diff流程
  • No.10 笔记 | PHP学习指南:PHP数组掌握
  • Linux的环境与历史
  • Label Studio 半自动化标注
  • 2-119 基于matlab的合成孔径雷达(SAR)RDA(距离多普勒算法)、RMA(距离徙动算法)、CSA(线性调频变标算法)算法点目标成像与分析
  • 搭建一个高效的 TikTok 节点:从零开始的实践指南
  • 10月10日
  • ECharts 实例对象中的所有选项配置详解
  • 前端reactvue3——实现滚动到底加载数据
  • 高级java每日一道面试题-2024年10月7日-框架篇[springboot篇]-springboot如何处理循环依赖的问题?
  • VVIC商品详情接口技术解析与实战代码示例
  • 数据结构——顺序表的实现
  • merlion的dashboard打开方法
  • 微服务之间的相互调用的几种常见实现方式对比
  • Qt实现侧边栏功能
  • html+css+js实现Slider滑块
  • detectron2/data/catalog.py源码笔记