DFS:深搜+回溯+剪枝解决组合问题

                                               创作不易,感谢支持!!!

一、电话号码的组合

. - 力扣(LeetCode)

class Solution {
public:string hash[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};string path;//记录路径vector<string> ret;//记录返回值vector<string> letterCombinations(string digits) {if(digits.size()==0) return ret;dfs(digits,0);return ret;}void dfs(string &digits,int pos){if(path.size()==digits.size()) {ret.push_back(path);return;}for(auto ch:hash[digits[pos]-'0'])//从当前位置开始遍历,然后再去下一个里面找{path.push_back(ch);dfs(digits,pos+1);path.pop_back();}}
};

二、括号生成

. - 力扣(LeetCode)

class Solution {
public:vector<string> ret;string path;int n;vector<string> generateParenthesis(int _n) {n=_n;dfs(0,0);return ret;}void dfs(int open,int close)//open和close记录上界和下界{if(path.size()==2*n) {ret.push_back(path);return;}if(open<n) {path.push_back('(');dfs(open+1,close);path.pop_back();}if(close<open){path.push_back(')');dfs(open,close+1);path.pop_back();}}
};

 三、组合

. - 力扣(LeetCode)

class Solution {
public:vector<vector<int>> ret;vector<int> path;int k;//用k全局,可以减少一个参数int n;//用n全局,可以减少一个参数vector<vector<int>> combine(int _n, int _k) {k=_k;n=_n;dfs(1);return ret;}void dfs(int pos){if(path.size()==k) {ret.push_back(path);return;}for(int i=pos;i<=n;++i){path.push_back(i);dfs(i+1);path.pop_back();}}
};

四、目标和

. - 力扣(LeetCode)

class Solution {int ret=0;//记录返回结果
public:int findTargetSumWays(vector<int>& nums, int target) {dfs(nums,target,0,0);return ret;}void dfs(vector<int>& nums, int target,int index,int sum){if(index==nums.size()) {if(sum==target)  ++ret;}//选正数else{dfs(nums,target,index+1,sum+nums[index]);dfs(nums,target,index+1,sum-nums[index]);}}};

五、组合总和I

. - 力扣(LeetCode)

class Solution {vector<vector<int>> ret;vector<int> path;
public:vector<vector<int>> combinationSum(vector<int>& candidates, int target) {dfs(candidates,0,target);return ret;}void dfs(vector<int>& candidates,int pos,int target){if(target==0){ ret.push_back(path);return;}if(target<0) return;for(int i=pos;i<candidates.size();++i)//第一层,遍历每个数{path.push_back(candidates[i]);dfs(candidates,i,target-candidates[i]);//要从原先的位置去找path.pop_back();}}
};

class Solution {vector<vector<int>> ret;vector<int> path;
public:vector<vector<int>> combinationSum(vector<int>& candidates, int target) {dfs(candidates,0,target);return ret;}void dfs(vector<int>& nums,int pos,int target){if(target==0){ ret.push_back(path);return;}if(target<0||pos==nums.size()) return;for(int k=0;k*nums[pos]<=target;++k)//第一层,遍历每个数{if(k) path.push_back(nums[pos]);dfs(nums,pos+1,target-k*nums[pos]);//要从原先的位置去找}for(int k=1;k*nums[pos]<=target;++k) path.pop_back();//}
};

六、组合总和II

. - 力扣(LeetCode)

七、组合总和III

. - 力扣(LeetCode)

class Solution {
public:vector<vector<int>> ret;//记录组合vector<int> path;//记录路径vector<vector<int>> combinationSum3(int k, int n) { if(n>45) return ret;//剪枝dfs(k,n,1);return ret;}void dfs(int k,int n,int pos){if(k==0&&n==0) {ret.push_back(path);return;}if(n<0||k<0) return;for(int i=pos;i<=9;++i){path.push_back(i);dfs(k-1,n-i,i+1);path.pop_back();}}
};

八、组合总和IV

. - 力扣(LeetCode)

该题和前面是类似的,但是用回溯算法,会超时

class Solution {
public:int combinationSum4(vector<int>& nums, int target) {vector<int> dp(target + 1);dp[0] = 1;for (int i = 1; i <= target; i++) {for (int& num : nums) {if (num <= i&& dp[i - num] < INT_MAX - dp[i]) {dp[i] += dp[i - num];}}}return dp[target];}
};

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[实验报告]--基于端口安全

[实验报告] 目录 [实验报告] 一、项目背景 二、实验环境 三、项目规划设计 四、项目实施 五、验证项目成果 基于端口安全的 Jan16 公司网络组建 一、项目背景 Jan16 公司开发部为重要部门&#xff0c;所有员工使用指定的计算机工作&#xff0c;为防止员工或访客使 用个…

chabot项目介绍

项目介绍 整体的目录如下所示&#xff1a; 上述的项目结构中出了model是必须的外&#xff0c;其他的都可以根据训练的代码参数传入进行调整&#xff0c;有些不需要一定存在data train.pkl:对原始训练语料进行tokenize之后的文件,存储一个list对象&#xff0c;list的每条数据表…

基于H2O AutoML与集成学习策略的房屋售价预测模型研究与实现

项目简述&#xff1a; 本项目采用H2O AutoML工具&#xff0c;针对加州房屋销售价格预测问题进行了深入研究与建模。项目以Kaggle提供的加州房屋 交易数据集为基础&#xff0c;通过数据清洗、特征工程、模型训练与评估等步骤&#xff0c;构建了一种基于集成学习策略的房价预测模…

好物视频素材在哪找?视频素材大全app下载

创作优质视频内容不仅仅是一种艺术&#xff0c;也是一种科学&#xff0c;需要对素材的深刻理解和精心挑选。掌握了这些高清无水印视频素材&#xff0c;您就拥有了创作引人入胜视频内容的强大工具。以下是更多精选的视频素材网站&#xff0c;旨在为您的视频项目提供更广阔的视野…

GDPU 竞赛技能实践 天码行空6

&#x1f4d6; 敌兵布阵 C国的死对头A国这段时间正在进行军事演习&#xff0c;所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段&#xff0c;所以每个工…

C++中二叉搜索树的模拟实现(二叉搜索树是map,set的底层原理)

搜索二叉树 定义 搜索二叉树:左子树小于根,右子树大于根.搜索二叉树的中序序列是升序的.所以对于二叉树而言,它的左子树和右子数都是二叉搜索树 下图就是二叉搜索树 二叉搜索树的性质: 二叉搜索树的中序遍历出的数据是有序的,并且二叉树搜索树在查找某个数的时候,一般情况下…

基于muduo网络库实现的集群聊天服务器

目录 项目内容开发环境安装说明技术介绍项目目录数据库设计项目介绍启动服务器启动客户端注册账号登录成功一对一聊天业务创建群聊业务加入群聊业务群聊业务添加好友业务离线消息存储业务 特殊说明Gitee地址 &#xff01;&#xff01;&#xff01;项目是照着腾讯课堂施磊老师的…

文件操作讲解

目录 一.为什么使用文件 二.什么是文件 2.1程序文件 2.2数据文件 2.3文件名 三.文本文件和二进制文件 fwrite函数 fclose函数 四.文件的打开和关闭 4.1流和标准流 4.2文件指针 4.3文件的打开和关闭 五.文件的顺序读写 5.1文件的顺序读写函数 5.1.1fgetc函数…

OpenCV-python安装教程

先安装opencv-contrib-python pip install opencv-contrib-python 再换源安装opencv-python pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple 如果出现 使用这个&#xff0c;3.6环境下不能安装opencv的最新版本 pip install opencv-python4.5.5.62…

基于SpringBoot+Vue的电影票管理系统的设计和实现【附源码】

1、系统演示视频&#xff08;演示视频&#xff09; 2、需要交流和学习请联系

机台数据传输共享存在哪些问题?机台数据管控怎么做?

一些金融机构、大型制造业以及晶圆制造厂里面&#xff0c;都会存在大量的机台设备&#xff0c;这些机台会产⽣庞⼤⽽属性不同的数据&#xff0c;这些数据需要定期的进行采集和利用。机台数据在传输分享过程中&#xff0c;会面临各种问题和调整&#xff0c;所以需要做好机台数据…

CSS——精灵图

CSS——精灵图 目录 CSS——精灵图什么是精灵图&#xff1f;导入精灵图裁剪精灵图使用精灵图方式1方式2 什么是精灵图&#xff1f; 精灵图&#xff08;Spritesheet&#xff09;是指将多个小图标、图像或动画合并到一个大图像中的技术。在网页设计和游戏开发中&#xff0c;精灵…