代码训练营Day.27 | 39. 组合总和、40. 组合总和II、131. 分割回文串

news2024/9/20 12:36:52

39. 组合总和

1. LeetCode链接

. - 力扣(LeetCode)

2. 题目描述

3. 解法

与其他组合总和题目不同的是,这一次数组中的数字可以重复使用。

回溯:

1. 参数和返回值。参数:数组、遍历起点、目标值。

2. 终止条件。target < 1 则终止。

3. 单层递归逻辑。遍历数组,将每一个数当作当前递归层的候选值,然后进一步递归。因为可以重复使用,所以下一层的起点仍然是当前值的位置而不用+1;target -= vec[i]。当target == vec[i]时,将result压入results。

class Solution {
public:
    vector<vector<int>> results;
    vector<int> result;
    void backtracking(vector<int>& vec, int start, int target) {
        if (target < 1) return;
        for (int i = start; i < vec.size(); i++) {
            result.push_back(vec[i]);
            if (target == vec[i]) results.push_back(result);
            else backtracking(vec, i, target - vec[i]);
            result.pop_back();
        }
        return;
    }
    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
        backtracking(candidates, 0, target);
        return results;
    }
};

40. 组合总和II

1. LeetCode链接

. - 力扣(LeetCode)

2. 题目描述

3. 解法

与其他组合总和不同的是,数组中含有相同数字,而仍然要求两种答案不可重复。

方法就是先排序,再组合,当前递归层的候选值只选每种数字的第一个。

注意,在跳过重复数字时,不要额外i++。

class Solution {
public:
    vector<vector<int>> results;
    vector<int> result;
    void backtracking(vector<int>& vec, int start, int target) {
        if (target < 0) return;
        if (target == 0) {
            results.push_back(result);
            return;
        }
        for (int i = start; i < vec.size(); i++) {
            if (i > start && (vec[i] == vec[i - 1])) {
                continue;
            }
            result.push_back(vec[i]);
            backtracking(vec, i + 1, target - vec[i]);
            result.pop_back();
        }
        return;
    }
    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
        sort(candidates.begin(), candidates.end());
        backtracking(candidates, 0, target);
        return results;
    }
};

剪枝:

class Solution {
public:
    vector<vector<int>> results;
    vector<int> result;
    void backtracking(vector<int>& vec, int start, int target) {
        if (target == 0) {
            results.push_back(result);
            return;
        }
        for (int i = start; i < vec.size() && target >= vec[i]; i++) { // 剪枝
            if (i > start && (vec[i] == vec[i - 1])) {
                continue;
            }
            result.push_back(vec[i]);
            backtracking(vec, i + 1, target - vec[i]);
            result.pop_back();
        }
        return;
    }
    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
        sort(candidates.begin(), candidates.end());
        backtracking(candidates, 0, target);
        return results;
    }
};

131. 分割回文串

1. LeetCode链接

. - 力扣(LeetCode)

2. 题目描述

3. 解法

比较难想到,但仍然是组合问题,组合总和问题是本层递归要选哪个数字为候选值,分割回文串问题是本层递归要分割前几个合为回文串的字符作为候选字符串。

每一层的要割的回文串起点,取决于上一层递归割的终点。

所以不难想到:

class Solution {
public:
    vector<vector<string>> results;
    vector<string> result;
    bool huiwen(string s) {
        for (int left = 0, right = s.size() - 1; left < s.size(); left++, right--) {
            if (s[left] != s[right]) return false;
        }
        return true;
    }
    void backtracking(string& s, int start) {
        if (start == s.size()) {
            results.push_back(result);
            return;
        }
        for (int i = start; i < s.size(); i++) {
            string ss(s.begin() + start, s.begin() + i + 1);
            if (!huiwen(ss)) continue;
            result.push_back(ss);
            backtracking(s, i + 1);
            result.pop_back();
        }
        return;
    }
    vector<vector<string>> partition(string s) {
        backtracking(s, 0);
        return results;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1366308.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Prometheus Blackbox_exporter笔记

一、安装Promtheus 在 Prometheus 官网 Download | Prometheus 获取适用于 Linux 的 Prometheus 安 装包&#xff0c;这里我选择最新的 2.46.0 版本&#xff0c;我是 Linux 系统&#xff0c;选择下载 prometheus-2.46.0.linux-amd64.tar.gz 下载安装包&#xff1a; wget htt…

Elasticsearch:Serarch tutorial - 使用 Python 进行搜索 (三)

这个是继上一篇文章 “Elasticsearch&#xff1a;Serarch tutorial - 使用 Python 进行搜索 &#xff08;二&#xff09;” 的续篇。在今天的文章中&#xff0c;本节将向你介绍一种不同的搜索方式&#xff0c;利用机器学习 (ML) 技术来解释含义和上下文。 向量搜索 嵌入 (embed…

【Axure高保真原型】日期天数加减计算器

今天和大家分享日期天数加减计算器的原型模板&#xff0c;我们通过这个模板选择指定日期&#xff0c;然后填写需要增加或者减少的天数&#xff0c;点击确认按钮后&#xff0c;就可以计算出对应的结束日期&#xff0c;本案例提供中继器版的日期选择器&#xff0c;以及JS版的日期…

C++常见的代码操作

1.输出C版本&#xff1a;cout << __cplusplus << endl; #include <iostream>int main() { cout << __cplusplus << endl;system("pause");return 0; } 老版的话会输出199711&#xff0c;支持c11的话会输出201103 注&#xff1a;vis…

java中实现对文件高效的复制

不多说我们直接上代码&#xff1a; 这个是使用NIO包下的FileChannel和ByteBuffer进行文件的操作的&#xff0c;会比较高效。

《人生没有太晚的开始》读书笔记

目录 一、作者简介 二、如何开始作画的&#xff1f; 三、经典语句摘录 一、作者简介 摩西奶奶&#xff08;安娜玛丽罗伯逊摩西&#xff09;1860- 1961年 78岁开始学习绘画&#xff0c;93岁登上《时代》杂志封面。 摩西奶奶的一生&#xff0c;是富有传奇色彩的一生&#xf…

企业内部知识库搭建真的很重要,优秀企业必备

在瞬息万变的商界&#xff0c;知识、信息和经验的获取和流通对于企业的生存和发展至关重要。每一个员工的专业知识、经验和教训&#xff0c;都不仅仅是他们自己的财富&#xff0c;更是企业的宝贵资产。然而&#xff0c;这些散布在公司各部门&#xff0c;甚至个别员工头脑中的知…

基于ssm的高校班级同学录网站设计与实现+jsp论文

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统高校班级同学录信息管理难度大&#xff0c;容错率低&…

数环通12月产品更新:新增数据表相关功能、优化编辑器,15+应用进行更新

为了满足用户不断增长的需求&#xff0c;我们持续努力提升产品的功能和性能&#xff0c;以更好地支持用户的工作。 数环通12月的最新产品更新已经正式发布&#xff0c;带来了一系列强大的功能&#xff0c;以提升您的工作效率和系统的可靠性。 更新快速预览 新增&优化功能&a…

【Win10安装Qt6.3】安装教程_保姆级

前言 Windows系统安装Qt4及Qt5.12之前版本和安装Qt.12之后及Qt6方法是不同的 &#xff1b;因为之前的版本提供的有安装包&#xff0c;直接一路点击Next就Ok了。但Qt5.12版本之后&#xff0c;Qt公司就不再提供安装包了&#xff0c;不论是社区版&#xff0c;专业版等&#xff0c…

你的手机可以检测听力啦

我的第一部手机是医院配发给我应对急诊的诺基亚手机&#xff0c;翻盖儿的&#xff0c;只能用来打电话。但现在的手机对于一个医生来讲具备了很多超现实的功能&#xff0c;比如听觉健康管理&#xff01;在你正常的情况下&#xff0c;你未必体会到听觉障碍给你带来的困惑。但是一…

1.3号io网络

文件IO 1.文件IO是基于系统调用 2.程序每进行一次系统调用&#xff0c;就会从用户空间向内核空间进行一次切换&#xff0c;执行效率较慢 3.目的&#xff1a;由于后期进程间通信&#xff0c;如管道、套接字通信&#xff0c;都使用的是文件IO&#xff0c;所以引入文件IO操作的…

localhost和127.0.0.1的区别是什么?

localhost和127.0.0.1的区别是什么&#xff1f; 前端本地调试的时候&#xff0c;应该没少和localhost打交道&#xff0c;只需要执行 npm run 就能在浏览器中打开页面窗口&#xff0c;地址栏显示的就是这个 http://localhost:xxx/index.html localhost是什么&#xff1f; loca…

嘴尚绝:卤味市场未来发展潜力无限,谁将成为下一个风口?

随着人们生活水平的提高&#xff0c;卤味作为一种美味的小吃&#xff0c;越来越受到消费者的喜爱。在餐饮市场上&#xff0c;卤味市场也呈现出越来越繁荣的景象。那么&#xff0c;卤味市场未来发展如何呢&#xff1f;今天&#xff0c;我们就来探讨一下这个问题。 一、消费升级推…

大数据HCIE成神之路之特征工程——特征选择

特征选择 1.1 特征选择 - Filter方法1.1.1 实验任务1.1.1.1 实验背景1.1.1.2 实验目标1.1.1.3 实验数据解析1.1.1.4 实验思路 1.1.2 实验操作步骤 1.2 特征选择 - Wrapper方法1.2.1 实验任务1.2.1.1 实验背景1.2.1.2 实验目标1.2.1.3 实验数据解析1.2.1.4 实验思路 1.2.2 实验操…

气膜建筑:舒适、智能、可持续

气膜建筑之所以能够拥有广阔的发展空间&#xff0c;源于其融合了诸多优势特点&#xff0c;使其成为未来建筑领域的前沿趋势。 气膜建筑注重环境可持续性和能源效率。在材料和设计上&#xff0c;它采用可回收材料、提高热保温效果&#xff0c;并积极利用太阳能等可再生能源&…

微电子专业词汇汇总,ICer入门必备!

在芯片行业&#xff0c;很多相关的技术术语都是用英文表述。在这里为大家整理了一些常用的微电子专业词汇&#xff0c;希望对大家有所帮助。&#xff08;文末可领全部文档&#xff09; Abrupt junction 突变结 Accelerated testing 加速实验 Acceptor 受主 Acceptor atom 受主…

【计算机网络】ARP最全详解

在网络世界中&#xff0c;只有两种地址&#xff0c;一种是之前讲解过的MAC地址&#xff0c;另一种是IP地址。MAC地址是烧制在NIC网卡内部的物理地址&#xff0c;在数据链路层中进行&#xff1b;IP地址则是在操作系统&#xff08;OS&#xff09;中设置的逻辑地址&#xff0c;在网…

启动ElasticSearch报错:ERROR: Elasticsearch exited unexpectedly, with exit code 78

我在Ubuntu下通过Docker安装ElasticSearch的时候&#xff0c;启动容器报错&#xff0c;最后一行报错内容如下&#xff1a; ERROR: Elasticsearch exited unexpectedly, with exit code 78上图是完整报错日志&#xff0c;从中我们可以看到关键错误信息&#xff0c;错误原因是vm…

多线程-生产者消费者模型

一、基本信息 1、场景介绍&#xff1a;厨师和吃货的例子&#xff0c;吃货吃桌子上的面条&#xff0c;吃完让厨师做&#xff0c;厨师做完面条放桌子上&#xff0c;让吃货吃&#xff0c;厨师如果发现桌子上有面条&#xff0c;就不做&#xff0c;吃货发现桌子上没有面条就不吃。 …