Day29 回溯算法part05 491. 非递减子序列 46. 全排列 47. 全排列 II

回溯算法part05 491. 非递减子序列 46. 全排列 47. 全排列 II

491. 非递减子序列

class Solution {
private:vector<vector<int>> result;vector<int> path;
public:void backTracing(vector<int>& nums,int startIndex){if(path.size()>1) result.push_back(path);unordered_set<int> uset;for(int i = startIndex;i<nums.size();i++){if( (!path.empty() && nums[i]<path.back()) || uset.find(nums[i]) != uset.end()) continue; //非递增数组或者单层元素重复,跳过该层元素uset.insert(nums[i]); // 记录这个元素在本层用过了,本层后面不能再用了path.push_back(nums[i]);backTracing(nums,i+1);path.pop_back();}}vector<vector<int>> findSubsequences(vector<int>& nums) {backTracing(nums,0);return result;}
};

46. 全排列

class Solution {
private:vector<vector<int>> result;vector<int> path;
public:void backtracking(vector<int>& nums,vector<int>& used){ //值得注意的是,这里面的used是深度遍历的,与491本层使用有差别,所以去重位置有区别if(path.size()==nums.size()){result.push_back(path);return;} //叶子节点回收元素for(int i = 0; i<nums.size();i++){if(used[i]==1) continue;used[i] = 1;path.push_back(nums[i]);backtracking(nums,used);path.pop_back();used[i] = 0;}}vector<vector<int>> permute(vector<int>& nums) {vector<int> used(nums.size(),0);backtracking(nums,used);return result;}
};

47. 全排列 II

class Solution {
public:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& nums,vector<int>& used){// 此时说明找到了一组if (path.size() == nums.size()) {result.push_back(path);return;}for(int i = 0;i<nums.size();i++){if(i>0&&nums[i]==nums[i-1]&&used[i - 1] ==0) continue; //used[i - 1] ==0至关重要,树层上去重if(!used[i]){used[i] = 1;path.push_back(nums[i]);backtracking(nums,used);used[i] = 0;path.pop_back();}}}vector<vector<int>> permuteUnique(vector<int>& nums) {sort(nums.begin(), nums.end()); //排序vector<int> used(nums.size(),0);backtracking(nums,used);return result;}
};

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

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

相关文章

【Scala】——流程控制

1 if-else 分支控制 让程序有选择的的执行&#xff0c;分支控制有三种&#xff1a;单分支、双分支、多分支 1.1单分支 if (条件表达式) {执行代码块 }1.2 双分支 if (条件表达式) {执行代码块 1 } else {执行代码块 2 }1.3 多分支 if (条件表达式1) {执行代码块 1 } else …

初学者的基本 Python 面试问题和答案

文章目录 专栏导读1、什么是Python&#xff1f;列出 Python 在技术领域的一些流行应用。2、在目前场景下使用Python语言作为工具有什么好处&#xff1f;3、Python是编译型语言还是解释型语言&#xff1f;4、Python 中的“#”符号有什么作用&#xff1f;5、可变数据类型和不可变…

GSP算法在数据挖掘中的应用

文章目录 一&#xff1a;基本概念介绍二&#xff1a;从一个样例入手三 论文中定义的一些细节四&#xff1a;GSP算法五.算法六 源代码及数据集等总结七. 参考文章 一&#xff1a;基本概念介绍 序列模式挖掘&#xff1a;指挖掘相对时间或其他模式出现频率高的模式 序列模式挖掘…

CMake入门教程【核心篇】设置和使用缓存变量

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 概述设置缓存变量使用缓存变量更改缓存变量完整代码示例实战使用技巧注意事项总结与分析

锂电池制造设备中分布式IO模块优势

在“碳达峰、碳中和”目标推动下&#xff0c;新能源汽车当下发展势头正盛&#xff0c;而纯电动车的核心部件则是&#xff1a;锂电池。动力型锂电池作为新能源汽车核心零部件&#xff0c;其发展与新能源汽车行业息息相关&#xff0c;迎来广阔的市场空间。 为何采用I/O模块&#…

Qt 不允许指针指向不完整的类类型 “QScrollBar“

错误原因1&#xff1a;没有将相应的头文件包含进来 解决方法&#xff1a;包含头文件 #include <QScrollBar>错误原因2&#xff1a;使用了不完整类型的指针 解释&#xff1a; 在C中&#xff0c;如果尝试使用一个不完整类型的指针&#xff0c;编译器会报错。例如&#xff…

Android 13 原生浏览器-默认关闭 JavaScript

介绍 客户觉得此功能比较耗费流量&#xff0c;于是想要默认关闭此功能&#xff0c;此功能的入口是在浏览器-设置-高级-启用 JavaScript。 修改 路径&#xff1a;Browser/res/xml-sw600dp/advanced_preferences.xml <CheckBoxPreferenceandroid:key"enable_javascript…

常见类型的yaml文件如何编写?--kind: Deployment

基本说明 Deployment 资源是 Kubernetes 重要的组成部分之一&#xff0c;通过指定 Deployment 中的 Pod 模板和副本数量&#xff0c;Kubernetes 可以自动地创建并管理一组具有相同配置的 Pod&#xff0c;这样即使某些 Pod 发生故障或需要升级&#xff0c;也可以轻松地进行控制…

Linux中快速搭建RocketMQ测试环境

必要的文件下载 为什么选择RocketMQ | RocketMQ x86_64位JDK下载0jdk/8u391-b13 rocketmq二进制包下载-rocketmq-all-5.1.4-bin-release.zip 编译好的直接可用的dashboard【rocketmq-dashboard-1.0.0.jar】请在文章顶部下载 dashboard配套的配置文件【application.propert…

AI真正的Killer App 仍然缺席

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

汇编和C语言转换

C语言和汇编语言之间有什么区别 C语言和汇编语言之间存在显著的区别,主要体现在以下几个方面: 抽象层次: 汇编语言:更接近硬件的低级语言,通常与特定的处理器或指令集紧密相关。它提供了对处理器指令的直接控制,允许程序员直接操作硬件资源,如寄存器、内存等。 C语言:…

Android 车联网——CarUxRestrictionsManagerService介绍(十六)

在前面文章中经常提到 UX Restrictions,这里我们就来分析一下 CarUxRestrictions 相对应的 Manager 和 Service。 一、简介 CarUxRestrictionsManagerService 是安卓汽车平台中的一个核心服务,旨在管理汽车交互体验时的用户体验限制。它允许车载应用程序根据许多方面的限制…

ECMAScript6历史-前端开发+ECMAScript+基础语法+入门教程

ECMAScript6详解 ECMAScript 历史 我们首先来看 ECMA 是什么。ECMA&#xff0c;读音类似“埃科妈”&#xff0c;是欧洲计算机制造商协会&#xff08;European Computer Manufacturers Association&#xff09;的简称&#xff0c;是一家国际性会员制度的信息和电信标准组织。19…

linux 网络驱动之net_device 结构介绍

net_device 结构处于网络驱动层的非常核心的位置并且值得完全的描述. 这个列表描述 了所有成员, 更多的是提供了一个参考而不是用来备忘. 本章剩下的部分简要地描述了每 个成员, 一旦它用在例子代码上, 因此你不需要不停地回看这一节. 全局信息 结构 net_device 的第一部分是…

AcWing 203. 同余方程(扩展欧几里得算法)

题目链接 203. 同余方程 - AcWing题库高质量的算法题库https://www.acwing.com/problem/content/205/ 来源 《算法竞赛进阶指南》, NOIP2012提高组 题解 本题中的同余方程可以转化为ax by 1的形式&#xff0c;利用扩展欧几里得算法可以求得特解为&#xff0c;则通解为。 代…

网站建设网络设计营销类网站模板

★安装环境要求★ 服务器&#xff1a;Linux / Apache / IIS PHP版本&#xff1a;5.4及5.4以上&#xff0c;完美支持php7.4 MYSQL版本&#xff1a;5.0以上 PS&#xff1a;php版本推荐5.6&#xff0c;mysql推荐使用5.7 ★模板安装步骤★ 1、请将源码包里面的所有文件和文件夹上…

【每日一题】删除子串后的字符串最小长度

文章目录 Tag题目来源解题思路方法一&#xff1a;栈 写在最后 Tag 【栈】【字符串】【2024-01-10】 题目来源 2696. 删除子串后的字符串最小长度 解题思路 方法一&#xff1a;栈 思路 按照题目要求需要移除字符串中的 “AB” 和 “CD” 子字符串&#xff0c;并且移除这两种…

Clean Code读后总结——前进者的基石

前言 作为一个程序员&#xff0c;再职业生涯中会写很多很多万行代码。感觉学习写代码的过程很像学习写作的过程&#xff0c;写大型软件就是在写一本长篇小说&#xff0c;那么如何定义好的代码&#xff0c;感觉就像是问说怎么写出好的文章。 那么什么是好的代码呢&#xff1f;对…

Helix QAC 2023.4 新版支持C++20语言,带来更多性能提升!

Helix QAC 2023.4 新增功能 Helix QAC 2023.4全面支持MISRA C:2023规则&#xff0c;涵盖100%的指南。此版本还加强了对C20语言的支持&#xff0c;改进了数据流分析性能&#xff0c;并在整个产品中增加了多项用户体验改进。 增强的C20支持 此版本新增了对以下语言特性的支持&a…

代码随想录算法训练营Day28|93.复原IP地址、78.子集、90.子集II

93.复原IP地址 题目链接&#xff1a;93.复原IP地址 文档链接&#xff1a;93.复原IP地址 视频链接&#xff1a;回溯算法如何分割字符串并判断是合法IP&#xff1f;| LeetCode&#xff1a;93.复原IP地址 C实现 class Solution { private:vector<string> result;bool isVal…