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

算法训练营第27天|LeetCode 39.组合总和 40.组合总和2 131.分割回文串

LeetCode 39.组合总和

题目链接:

LeetCode 39.组合总和

解题思路:

用回溯的方法,,注意这次回溯不是i+1,而是i,是因为可用重复选取。

代码:

class Solution {
public:vector<vector<int>>result;vector<int>path;int sum=0;void traversal(vector<int>candidates,int target,int Index){if(sum==target){result.push_back(path);return;}else if(sum>target){return;}for(int i=Index;i<candidates.size();i++){path.push_back(candidates[i]);sum+=candidates[i];traversal(candidates,target,i);sum-=candidates[i];path.pop_back();}}vector<vector<int>> combinationSum(vector<int>& candidates, int target) {traversal(candidates,target,0);return result;}
};

LeetCode 40.组合总和2

题目链接:

LeetCode 40.组合总和2


解题思路:

用used数组看前面元素是否使用过,之后将数组排序,当和前面元素重复且前面元素没用过时,元素进行下一个,来去重。

代码:

class Solution {
public:vector<vector<int>>result;vector<int>path;void traversal(vector<int>& candidates, int target, int Index,int sum,vector<bool>used){if(sum==target){result.push_back(path);return;}for(int i=Index;i<candidates.size()&&sum+candidates[i]<=target;i++){if(i>0&&candidates[i]==candidates[i-1]&&used[i-1]==false){continue;}path.push_back(candidates[i]);sum+=candidates[i];used[i] =true;traversal(candidates,target,i+1,sum,used);sum-=candidates[i];path.pop_back();used[i]=false;}}vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {sort(candidates.begin(),candidates.end());path.clear();result.clear();vector<bool>used(candidates.size(),false);traversal(candidates,target,0,0,used);return result;}
};

LeetCode 131.分割回文串

题目链接:

LeetCode 131.分割回文串


解题思路:

将切割类比为组合问题,将元素索引变化为切割位置,逐个判断是不是回文的,之后进行回溯。

代码:

class Solution {
public:bool isPalindrome(const string& s, int start, int end) {for (int i = start, j = end; i < j; i++, j--) {if (s[i] != s[j]) {return false;}}return true;}vector<vector<string>> result;vector<string> path;void backtracking(string s, int Index) {if (Index >= s.size()) {result.push_back(path);return;}for (int i = Index; i < s.size(); i++) {if (isPalindrome(s, Index, i)) {path.push_back(s.substr(Index, i - Index + 1));} else {continue;}backtracking(s, i + 1);path.pop_back();}}vector<vector<string>> partition(string s) {backtracking(s, 0);return result;}
};

http://www.lryc.cn/news/330099.html

相关文章:

  • 【Web】NSSCTF Round#20 Basic 两道0解题的赛后谈
  • memcached缓存数据库简介
  • C# WPF编程-Application类(生命周期、程序集资源、本地化)
  • fpga_hdmi
  • 鸿蒙(HarmonyOS)ArkTs语言基础教程开发准备
  • 【C++杂货铺】详解list容器
  • 使用filezilla连接Ubuntu22.04虚拟机
  • Verilog基础【二】
  • 定时推送任务 Apache HttpClient/okhttp3
  • centos7 安装 mysql
  • src挖掘技巧总结分享
  • 【面试八股总结】传输控制协议TCP(一)
  • 【系统架构师】-第13章-层次式架构设计
  • 【操作系统】想要更好的学习计算机,操作系统的知识必不可少!!!
  • AtCoder Grand Contest 066 B. Decreasing Digit Sums(构造 打表找规律)
  • Hadoop系列总结
  • 【第三方登录】Twitter
  • C++经典面试题目(十七)
  • DFS2 C++
  • 2021-08-06
  • Centos服务器Open Gauss 部署
  • Vue与Electron融合之道:从Web App到桌面App的华丽转身
  • Higress 基于自定义插件访问 Redis
  • Mysql的库函数
  • 绿联 安装onlyoffice容器并启用Cloudreve的office在线预览与编辑功能
  • 金钱卦起卦
  • 学透Spring Boot 003 —— Spring 和 Spring Boot 常用注解(附面试题和思维导图)
  • 新能源汽车充电桩常见类型及充电桩站场的智能监管方案
  • 让工作自动化起来!无所不能的Python
  • Facebook轮播广告是什么?投放过程中有哪些需要注意的吗?