力扣--深度优先算法/回溯算法47.全排列 Ⅱ

news2024/11/25 0:26:16

思路分析:

  1. 使用DFS算法进行全排列,递归地尝试每个可能的排列方式。
  2. 使用 path 向量保存当前正在生成的排列,当其大小达到输入数组的大小时,将其加入结果集。
  3. 使用 numvisited 向量标记每个数字是否已经被访问过,以确保每个数字在一个排列中只使用一次。
  4. 在递归过程中,对于每个未访问的数字,将其加入排列,标记为已访问,然后递归生成下一个位置的数字。
  5. 在递归完成后,需要回溯,撤销对当前数字的标记,同时将其从排列中移除,以尝试其他可能的排列。
  6. 使用额外的 visited 向量标记每个数字是否已经在当前排列中被访问过,避免重复访问。
class Solution {
    vector<vector<int>> result; // 存储最终的全排列结果
    vector<int> path; // 存储当前正在生成的排列

    // 深度优先搜索函数,生成全排列
    void dfs(vector<int>& nums, vector<bool> numvisited) {
        vector<bool> visited(21, false); // 用于标记数字是否被访问过

        for (int i = 0; i < nums.size(); i++) {
            // 如果当前数字已经在当前排列中使用过,则跳过
            if (numvisited[i] == true)
                continue;

            path.push_back(nums[i]); // 将当前数字加入排列
            numvisited[i] = true; // 标记当前数字为已访问

            // 如果当前排列长度等于数组长度,说明已经生成一个完整的排列,加入结果集
            if (path.size() == nums.size())
                result.push_back(path);

            // 如果当前数字在当前排列中未被访问过,则递归生成下一个位置的数字
            if (visited[nums[i] + 10] != true) {
                visited[nums[i] + 10] = true;
                dfs(nums, numvisited);
            }

            path.pop_back(); // 回溯,将当前数字从排列中移除
            numvisited[i] = false; // 回溯,撤销对当前数字的标记
        }

        visited.clear(); // 清除标记数组,节约空间。
    }

public:
    // 主函数,用于生成给定数组的全排列(包含重复元素)
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        vector<bool> numvisited(nums.size(), false); // 初始化数字访问标记数组
        dfs(nums, numvisited); // 调用深度优先搜索函数生成全排列
        return result; // 返回最终结果
    }
};

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

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

相关文章

五 超级数据查看器 讲解稿 列表功能2

五 超级数据查看器 讲解稿 列表功能2 点击此处 以新页面 打开B站 播放教学视频 点此下载 百度手机助手 下载地址4 讲解稿全文&#xff1a; 大家好&#xff0c;今天我们讲解一下&#xff0c;超级数据查看器列表界面&#xff0c;分为1-2两集。这是第二集 继续讲解弹出式菜单…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的远距离停车位检测系统(深度学习代码+UI界面+训练数据集)

摘要&#xff1a;开发远距离停车位检测系统对于提高停车效率具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个远距离停车位检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不…

极简云商业版 开源源码

简化版的云商业源码已经以开源形式发布了&#xff0c;现在可以解绑卡密和查询卡密。总体而言&#xff0c;这个版本已经相当完善了。在对接示例网盘中有一个用户注册的例子&#xff0c;需要配置一个邮箱。您可以在网页上启用QQ邮箱的标准版SMTP&#xff0c;并生成一个授权码。 …

【多用途】Fruits-360:包含水果和蔬菜的图像数据集

一、介绍 该数据集包含水果和蔬菜的高质量图像数据集。 包括以下水果和蔬菜&#xff1a; Apples (different varieties: Crimson Snow, Golden, Golden-Red, Granny Smith, Pink Lady, Red, Red Delicious), Apricot, Avocado, Avocado ripe, Banana (Yellow, Red, Lady Fin…

关于c++的protected关键字

关于c的protected关键字 分类引言例子1&#xff09;错误的demo2&#xff09;改正的demo protected在c中的含义与作用 分类 c基础知识 引言 做了很业务&#xff0c;c基础知识却忘了很多&#xff0c;今天看了一个例子&#xff0c;唤醒了我关于c三大特性之一----封装&#xff0…

一文看明白Transformer微调过程中嵌入向量的变化

TL&#xff1b;DR 微调在图像分类中显著影响嵌入向量。微调前的嵌入向量提供通用性表征&#xff0c;而微调后的嵌入向量捕获任务特定的特征。这种区别可能导致在异常检测和其他任务中的不同结果。微调前和微调后的嵌入向量各有其独特优势&#xff0c;应结合使用以实现图像分类…

【MySQL 系列】MySQL 语句篇_DDL 语句

DDL&#xff08; Data Definition Language&#xff0c;数据定义语言&#xff09;用在定义或改变表的结构数据类型、表之间的链接和约束等初始化工作上。常用的语句关键字包括 CREATE、 DROP、 ALTER 等。 文章目录 1、MySQL 中的 DQL 语句2、MySQL 中库表的 DQL 语句详解2.1、…

[leetcode~dfs]1261. 在受污染的二叉树中查找元素

给出一个满足下述规则的二叉树&#xff1a; root.val 0 如果 treeNode.val x 且 treeNode.left ! null&#xff0c;那么 treeNode.left.val 2 * x 1 如果 treeNode.val x 且 treeNode.right ! null&#xff0c;那么 treeNode.right.val 2 * x 2 现在这个二叉树受到「污…

LeetCode刷题---即时食物配送 II

LeetCode题解 解题思路: 1.首先先求出每个用户首次订单表&#xff0c;将其命名为表t &#xff08;select customer_id,min(order_date) as order_datefrom Deliverygroup by customer_id&#xff09;as t2.与原表连接&#xff0c;求出在用户首次订单表中即时订单的数量的总和…

遥感云计算的一个拐点

GeoForge&#xff0c;一个值得关注的遥感大数据应用 简介 GeoForge是由Ageospatial公司开发的一个基于大语言模型(GeoLLMs)的地理空间分析平台。GeoForg的目的是使每个人都可以轻松进行地图绘制和地理空间分析&#xff0c;无论您是外行还是专家。 Geo for ChatGPT 作者团队已…

多模态大模型Claude 3正式接入集简云与语聚!对标GPT-4且支持中文

自OpenAI发布GPT-4以来&#xff0c;引发了业务模式与应用使用的巨大变革&#xff0c;掀起了各大企业对于多模态大模型的研究热潮。3月初&#xff0c;AnthropicClaude在官网正式发布Claude 3系列多模态大模型&#xff0c;据了解&#xff0c;该模型在多个维度上超越了GPT-4&#…

Midjourney指控Stability AI夜袭数据,网络风波一触即发

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

03_渲染进程调用node

我们先创建一个文件夹及文件&#xff0c;并且在 html 引入 JS 文件。 在 render.js 里面输入以下内容&#xff1a; let fs require(fs) // let是在当前代码块有效console.log(fs) // 将fs对象的内容打印到控制台供调试和查看 fs 模块&#xff1a;对文件系统进行操作&#xf…

Dubbo:常见的面试题和答案

请关注微信公众号&#xff1a;拾荒的小海螺 1、什么是 Dubbo&#xff1f;它的作用是什么&#xff1f; 答&#xff1a; Dubbo 是一款高性能的 Java RPC 框架&#xff0c;是阿里巴巴公司开源的产品&#xff0c;用于提供高性能的分布式服务框架和面向服务的架构。Dubbo 的主要作…

Pytorch基础(21)-- torch.repeat_interleave()方法

分享一下自己目前在维护的Github项目&#xff0c;由于本人博士阶段接触了一个全新的研究方向-----使用机器学习、强化学习、深度学习等方法解决组合优化问题&#xff0c;维护这个项目的目的&#xff1a; &#xff08;1&#xff09;记录自己阅读过的paper&#xff0c;同时分享一…

bash: mysqldump: command not found

问题&#xff1a;在linux上执行mysql备份的时候&#xff0c;出现此异常 mysqldump命令找不到 解决&#xff1a; 1、找到mysql目录&#xff08;找到mysql可执行命令目录&#xff09; which mysql 有图可知&#xff0c;mysql安装在&#xff1a; /usr1/local/java/mysql 2、my…

Onlyfans年龄验证/无法支付解决方案

很多小伙伴在使用的时候遇到年龄验证&#xff0c;或者需要绑定visa卡&#xff0c;这里需要注意的是提示绑定visa卡直接绑定就好了&#xff0c;记得开好你的环境&#xff0c;要不然也会出现身份验证&#xff0c;对于我们来说验证一般是不过的 1、准备好环境 2、准备好卡&#…

差分逻辑电平 --- LVDS、CML、LVPECL互连

前言 首先了解差分逻辑电平结构&#xff0c;也包括单端逻辑电平 地址&#xff1a;常见的逻辑电平_常用的逻辑电平-CSDN博客 注&#xff1a;ECL >> PECL >> LVPECL演变而来&#xff1b;QDR&#xff08;Quad Data Rate):四倍数据倍率 本文章只涉及差分逻辑电平:LVDS…

[CISCN2019 华北赛区 Day2 Web1]Hack World 不会编程的崽

sql注入之简单的盲注。 为什么很多题目总是怪怪的&#xff1f;&#xff1f;&#xff1f; 输入1返回正常&#xff0c;但是1 and 11显示异常。fuzz大法启动 这些东西被禁用了。实际上"(and)"也被禁用了&#xff0c;看来fuzz字典还是少了很多。 刚好它告诉你表名与列名…

【Java】萌新的Spring纯注解集成Dubbo学习笔记

目录 介绍 Dubbo架构 实现 介绍 Dubbo 是一款高性能的 Java RPC 框架&#xff0c;它提供了完整的服务治理解决方案&#xff0c;包括远程服务调用、负载均衡、容错机制、服务注册和发现等功能。同时&#xff0c;Dubbo 与 Zookeeper 进行集成&#xff0c;利用 Zookeeper 作为…