第三十二天 | 46.全排列 47.全排列||

news2025/2/27 13:03:21

终于进入排列!(之前都是组合)

排列和组合的区别:在数学上的区别都懂,主要是看在代码实现上有什么区别

题目:46.全排列

树型结构比较简单

用used标记某一元素是否使用过。在组合问题中,其实是使用了startIndex来完成了这一目的

学完之后,一气呵成

class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;
    void backtracking(vector<int>&nums, vector<bool>& used){
        if(path.size() == nums.size()){
            result.push_back(path);
            return;
        }

        for(int i = 0; i < nums.size(); i++){
            if(used[i] == true) continue;
            used[i] = true;
            path.push_back(nums[i]);
            backtracking(nums, used);
            path.pop_back();
            used[i] = false;
        }
    }
    vector<vector<int>> permute(vector<int>& nums) {
        vector<bool> used(nums.size(), false);
        backtracking(nums, used);
        return result;
    }
};

唯一区别,也是核心区别就是用used数组代替startIndex来避免去到重复元素,根本原因就是排列和组合定义的本质不同。

题目:47.全排列||

果然与猜测相同,与46.全排列的区别就是本题的原数组中存在重复元素。

尝试作答:

        使用两个used数组,used1和used2,used1用来树枝去重,used2用来树层去重。

        排列问题应该可以进行排序的,不影响结果,所以used2也可以用unordered_set代替。

写出了以下错误代码(写的时候确实感觉有问题):

class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;
    void backtracking(vector<int>& nums, vector<bool>& used1, vector<bool>& used2){
        if(path.size() == nums.size()){
            result.push_back(path);
            return;
        }

        for(int i = 0; i < nums.size(); i++){
            if(used1[i] == true) continue;
            if(i > 0 && nums[i] == nums[i - 1] && used2[i - 1] == false) continue;
            path.push_back(nums[i]);
            used1[i] = true;
            used2[i] = true;
            backtracking(nums, used1, used2);
            used1[i] = false;
            used2[i] = false;
        }
    }
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        vector<bool> used1(nums.size(), false);
        vector<bool> used2(nums.size(), false);
        backtracking(nums, used1, used2);
        return result;
    }
};

正确思路:

        本体应该重点关注与组合问题在去重时的相同点和不同点

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

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

相关文章

【代码随想录】面试常考题目类型之贪心1

前言 更详细的在大佬的代码随想录 (programmercarl.com) 本系列仅是简洁版笔记&#xff0c;为了之后方便观看 本质 局部最优推出全局最优 验证 验证可不可以用贪心算法最好用的策略就是举反例&#xff0c;想不到反例就试贪心 分发饼干 455. 分发饼干 - 力扣&#xff08;…

【错题集-编程题】主持人调度(二)(贪心 + 优先级队列)

牛客对应题目链接&#xff1a;主持人调度&#xff08;二&#xff09;_牛客题霸_牛客网 (nowcoder.com) 一、分析题目 把区间按照左端点排序&#xff0c;然后搞个堆&#xff1a; 先把第⼀个区间的右端点加⼊到堆中。遍历后⾯的区间&#xff0c;分情况讨论&#xff1a;&#xff…

Danfoss丹佛斯S90泵比例放大器

S90R042、S90R055、S90R075、S90R100、S90R130、S90R180、S90R250电气排量控制变量泵比例阀放大器&#xff0c;电气排量控制为高增益控制方式&#xff1a;通过微小变化的输入电流控制信号即可推动伺服阀主阀芯至全开口位置&#xff0c;进而将最大流量的控制油引入到伺服油缸。伺…

【EI稳定检索|主题广泛】2024年航空航天、遥感与计算机国际会议(ARSC 2024)

2024年航空航天、遥感与计算机国际会议&#xff08;ARSC 2024&#xff09; 2024 International Conference on Aerospace, Remote Sensing, and Computing 【会议简介】 2024年航空航天、遥感与计算机国际会议将在古都西安召开。本次会议是航空航天、遥感与计算机领域的一次…

【网络安全】【Frida实战案例】某图xx付费功能逆向分析(一)

文章目录 一、目标应用二、环境三、步骤1、查看布局id2、用到的Log日志类信息3、尝试hook VIP判断方法 四、总结五、相关源码 1、【网络安全】【Frida实践案例】某图xx付费功能逆向分析&#xff08;一&#xff09; 2、【网络安全】【Frida实践案例】某图xx付费功能逆向分析&…

如何看固态硬盘是否支持trim功能?固态硬盘开启trim数据还能恢复吗

随着科技的飞速发展&#xff0c;固态硬盘&#xff08;SSD&#xff09;已成为电脑存储的主流选择。相较于传统的机械硬盘&#xff0c;固态硬盘以其高速读写和优秀的耐用性赢得了广泛好评。而在固态硬盘的众多功能中&#xff0c;TRIM功能尤为关键&#xff0c;它能有效提升固态硬盘…

【编程题-错题集】kotori和气球(组合数学)

牛客对应题目链接&#xff1a;kotori和气球 (nowcoder.com) 一、分析题目 简单的排列组合问题&#xff0c;结果等于 n 与 m-1 个 n - 1 的乘积。 二、代码 //值得学习的代码 #include <iostream>using namespace std;const int MOD 109;int main() {int n, m;cin >…

小红书笔记怎么发浏览量高?

小红书笔记发布是有技巧和策略的&#xff0c;为什么有的小红书笔记浏览量那么高&#xff0c;是因为下足了功夫&#xff0c;小红书笔记怎么发浏览量高&#xff1f;今天伯乐网络传媒就来给大家揭秘一下。 一、选题与定位 1. 热门话题选择 要想提高小红书笔记的浏览量&#xff0…

Java运算符:2种短路逻辑运算符

短路逻辑运算符用于处理布尔类型的值&#xff0c;即真&#xff08;true&#xff09;和假&#xff08;false&#xff09;。 Java提供了2种短路逻辑运算符 与&#xff08;&&&#xff09;或&#xff08;||&#xff09; 它们在控制流程、条件判断以及逻辑表达式中发挥着…

VMware17虚拟机安装Kali Linux2024详解

目录 简介 一、环境搭建 二、下载ISO镜像 三、新建虚拟机 为虚拟机选择合适的操作系统类型和版本 分配适当的内存、硬盘空间和其他虚拟机配置选项 四、硬件配置 编辑虚拟机设置 选择安装介质 五、界面化安装配置 简介 Kali Linux是一个基于Debian的Linux发行版&#…

企业指标设计方法:构建高效指标体系

指标设计是企业战略落地、经营决策支持和绩效评估的基础。在数字化转型的大背景下&#xff0c;准确有效的指标体系能够帮助企业快速响应市场变化&#xff0c;优化资源配置&#xff0c;提升运营效率。因此&#xff0c;科学合理的指标设计不仅是技术实现的问题&#xff0c;更是企…

学习笔记-C++

目录 1、何为常量 2、关键字 3、实型 4、水平制表符 5、string字符串 6、C中的三目运算符 7、随机数种子 8、结构体 9、各的区 10、引用 11、函数默认参数 12、函数占位参数 13、函数重载 14、私有属性 15、让另一个类作为本类的成员 16、声明和实现的文件…

Linux(八) 进程间通信

目录 一、什么进程间通信 1.1 进程间通信的目的 1.2 进程间通信的概念 1.3 进程间通信的分类 二、 管道/匿名管道(pipe) 2.1 什么是管道 2.2 管道的创建 2.3 站在文件描述符角度-深度理解管道 2.4 站在内核角度-管道本质 2.5 匿名管道的读写 2.6 匿名管道的读写规则 …

WSL2-Ubuntu(深度学习环境搭建)

1.在Windows的WSL2上安装Ubuntu 流程可参考&#xff1a;https://www.bilibili.com/video/BV1mX4y177dJ 注意&#xff1a;中间可能需要使用命令wsl --update更新一下wsl。 2.WSL数据迁移 按照下面流程&#xff1a;开始菜单->设置->应用->安装的应用->搜索“ubun…

为何要使用静态或动态住宅IP代理来运营亚马逊?

跨境电商作为当前主流的行业&#xff0c;在运营亚马逊等跨境电商平台时&#xff0c;使用静态或动态住宅IP代理成为了一个重要的策略。这种策略不仅有助于提升运营效率&#xff0c;还能在一定程度上保护卖家的隐私和账号安全。 静态住宅IP代理在亚马逊运营中的优势。 静态住宅I…

工业供热低碳化发展背景下 高温热泵市场发展前景广阔

工业供热低碳化发展背景下 高温热泵市场发展前景广阔 高温热泵是一种将低温热源的热能转换成高温热源的装置。高温热泵是热泵的一种&#xff0c;其制热出水温度高于普通热泵。高温热泵可直接替代传统燃煤锅炉&#xff0c;将工业生产过程中产生的中低温热量&#xff0c;转化为高…

KCNScrew Pack for mac v1.8(2024.05.15)激活版 序列号查询软件

KCNScrew Pack是一款Mac序列号查询软件&#xff0c;内置强大的序列号数据库。软件包含数千款软件序列号&#xff0c;基本上大多数常用软件你都可以找到相应的序列号。 KCNScrew Pack for mac v1.8(2024.05.15)激活版 序列号查询软件 主界面 打开KCNScrew可以看到如下的主界面&…

CSP备考---2023大湾区比赛易错题

解析 9.D无向图公式&#xff1a;有向图公式&#xff1a;本题考察无向图&#xff0c;故 12.D公式&#xff1a; 14.B有三种情况&#xff1a;1男2女、2男1女、3女。 17.错 因为12300400000超过了int的范围 18.错 21.D 23.对 25.A 26.D代入程序 31.C 33.C 36.D 37.A …

2024 年第四届长三角高校数学建模竞赛赛题B题超详细解题思路+问题一二代码分享

2024年第四届长三角数学建模竞赛B题详细解题思路 赛道B&#xff1a;人工智能范式的物理化学家 长三角分享资料&#xff08;问题一代码论文思路&#xff09;链接&#xff08;18点更新&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1lteKvIWNZ4v-Gd7oOcg…

【MySQL】 查询进阶 | 聚合查询 | 联合查询 | 聚合函数 | 笛卡尔积 | 内连接 | 外链接 | 自连接 | 子查询 | 合并查询

文章目录 查询进阶1.聚合查询1.聚合函数2.group by 子句3.having 2.联合查询笛卡尔积 1.内连接查询许仙同学的成绩查询所有同学的总成绩查询所有同学的每门课程和分数&#xff1a; 2.外连接1.内连接&#xff1a;2.左外连接3.右外链接 3.自连接4.子查询单行子查询多行子查询查询…