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

Leetcode Day5 含有重复元素集合的组合+

1、含有重复元素集合的组合

给定一个可能有重复数字的整数数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的每个数字在每个组合中只能使用一次,解集不能包含重复的组合。
【题目传送门】

思路:还是典型的DFS算法,用set过滤掉相同组合的列表

class Solution {
public:int N;int t;vector<vector<int> >ans;set<vector<int> >set_ans;vector<int>temp;void dfs(vector<int>&c,int index,int sum){temp.emplace_back(c[index]);if(sum==t){set_ans.insert(temp);// ans.emplace_back(temp);}else if(sum<t){for(int i=index+1;i<N;i++){if(sum+c[i]>t){break;}else{dfs(c,i,sum+c[i]);}}}temp.pop_back();}vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {t=target;N=candidates.size();sort(candidates.begin(),candidates.end());for(int i=0;i<N;i++){if(candidates[i]>t){break;}else{dfs(candidates,i,candidates[i]);}}for(auto v:set_ans){ans.emplace_back(v);}return ans;}
};

2、没有重复元素集合的全排列

给定一个不含重复数字的整数数组 nums ,返回其 所有可能的全排列 。可以 按任意顺序 返回答案。
【题目传送门】

思路:可以借用C++自带的next_permutation函数来完成这个DFS的过程

class Solution {
public:vector<vector<int> >ans;vector<vector<int>> permute(vector<int>& nums) {//全排列sort(nums.begin(),nums.end());do{ans.emplace_back(nums);}while(next_permutation(nums.begin(),nums.end()));return ans;}
};

3、含有重复元素集合的全排列

给定一个可包含重复数字的整数集合 nums ,按任意顺序 返回它所有不重复的全排列。
【题目传送门】

思路同上一题

class Solution {
public:vector<vector<int> >ans;vector<vector<int>> permuteUnique(vector<int>& nums) {//全排列sort(nums.begin(),nums.end());do{ans.emplace_back(nums);}while(next_permutation(nums.begin(),nums.end()));return ans;}
};

4、生成匹配的括号

正整数 n 代表生成括号的对数,请设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
【题目传送门】

class Solution {
public:vector<string>ans;string temp="";int N;void dfs(int len,int left,char tail){temp+=tail;//cout<<temp<<"\n";if(len==N){ans.emplace_back(temp);}else if(len<N){if(left+1<=(N>>1)){dfs(len+1,left+1,'(');}if((len-left)+1<=(N>>1)&&(left>=(len-left+1))){dfs(len+1,left,')');}}temp.pop_back();}vector<string> generateParenthesis(int n) {//生成有效的括号组合N=n<<1;dfs(1,1,'(');return ans;}
};
http://www.lryc.cn/news/31119.html

相关文章:

  • Mac Book pro(M1)使用总结
  • QML集成JavaScript
  • 学习周报3.5
  • java基础学习篇
  • Go 语言基础语法及应用实践
  • C语言自定义类型---进阶
  • 85.链表总结
  • 【博学谷学习记录】超强总结,用心分享|狂野大数据课程【DataFrame的相关API】的总结分析
  • 粒子群优化最小二乘支持向量机SVM回归分析,pso-lssvm回归预测
  • lavis多模态开源框架学习--安装
  • 【IDEA】如何在Tomcat上创建部署第一个Web项目?
  • 程序员画流程图的工具Draw.io
  • CAPL脚本DBLookup函数动态访问CAN 报文的属性
  • 2022年显卡性能跑分排名表
  • mx-font
  • 基于S32K148快速调试TJA1101
  • 万字长文详解webpack知识图谱
  • 模板测试(Stencil Test)
  • 【Go语言学习】安装与配置
  • HCIP-5OSPF区域类型学习笔记
  • C语言再学习第三章
  • 【aiy篇】小目标检测综述
  • 常用Linux命令的基本使用
  • 对跳表的深入理解
  • C++017-C++冒泡排序与插入排序
  • 数据结构基础之链表
  • css 的渲染层合成是什么,浏览器如何创建新的渲染层
  • nacos-sdk-rust binding to NodeJs
  • MySQL下载安装以及环境配置教程
  • 概率论 1.3 古典概型与几何概型