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

C++简洁版全排列代码

《代码随想录》在回溯章节中的全排列代码模板较为复杂,其实还有一种常用写法,思路是交换元素位置后做dfs(),并回溯。对应leetcode46题。

class Solution {
public:vector<vector<int>> res;void dfs(vector<int>num, int k){// k代表换到哪个下标了:如果为size,则表明都换过了if (k == num.size()){vector<int> path;for (int i = 0; i < k; i++)path.push_back(num[i]);res.push_back(path);return;}for (int i = k; i < num.size(); i++){{int t = num[i]; num[i] = num[k]; num[k] = t; }dfs(num, k + 1);{int t = num[i]; num[i] = num[k]; num[k] = t; }}}vector<vector<int>> permute(vector<int>& nums) {dfs(nums, 0);return res;}
};

简单对比全排列和组合的dfs模板的区别:
两者均使用dfs和回溯的思想

  1. 全排列和组合的主要区别是全排列的回溯部分是交换,组合的回溯部分是对路径做push()和pop()。
  2. 组合的数量需要有参数或变量限制选取个数,而全排列一定到达末尾,参数使用较少。
http://www.lryc.cn/news/351453.html

相关文章:

  • 2024电工杯B题保姆级分析完整思路+代码+数据教学
  • 基于svm的水果识别
  • 【DevOps】深入理解 Nginx Location 块:配置示例与应用场景详解
  • 专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(十一)
  • 未来机器人的发展方向
  • 美国硅谷高防服务器有哪些优势
  • Django介绍:探索Python最受欢迎的Web框架
  • 【Unity Shader入门精要 第9章】更复杂的光照(四)
  • 【软件工程】【23.10】p2
  • WPF--几种常用定时器Timer汇总
  • 在vue中实现下载文件功能
  • 文件中海量数据的排序
  • java项目之视频网站系统源码(springboot+vue+mysql)
  • 262 基于matlab的一级倒立摆仿真
  • 智能无网远控再升级 向日葵Q2Pro升级版发布
  • 2024电工杯A题详细思路代码分析数学建模:园区微电网风光储协调优化配置
  • Docker搭建mysql性能测试环境
  • 关于开启直连v2rayn代理Fiddler Charles bp抓包失败问题
  • Python 爬虫编写入门
  • Linux网络编程(socket)
  • 以太坊(3)——智能合约
  • 【Python设计模式03】简单工厂模式
  • java中的Collections类+可变参数
  • SpringBoot集成腾讯云敏感词校验API流程
  • android 避免混淆类名和方法名,但是方法内容需要被混淆
  • 通过ELRepo修改CentOS 7内核版本的详细步骤
  • C++开源库glog使用封装--自定义日志输出格式,设置日志保留时间
  • linux rc.local不生效
  • ROS2入门21讲__第07讲__节点:机器人的工作细胞
  • k8s node NotReady后会发生什么?