牛客热题:没有重复数字的全排列

📟作者主页:慢热的陕西人

🌴专栏链接:力扣刷题日记

📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言

在这里插入图片描述

文章目录

  • 牛客热题:没有重复数字的全排列
    • 题目链接
    • 方法一:递归
      • 思路
      • 代码
      • 复杂度
      • 时间复杂度
      • 空间复杂度

牛客热题:没有重复数字的全排列

题目链接

没有重复项数字的全排列_牛客题霸_牛客网 (nowcoder.com)

方法一:递归

思路

  1. 初始化:

    • permute函数接受一个整型向量num,并初始化两个辅助向量:st用于记录当前元素是否已经被使用,v用于存储当前排列。
    • num被排序以确保生成的排列按字典顺序。
  2. 递归辅助函数

    _helper

    • _helper函数通过递归生成排列。
    • 如果当前排列v的大小等于输入向量num的大小,表示生成了一个完整的排列,将其添加到结果向量res中。
    • 遍历num中的每一个元素,如果当前元素未被使用(!st[i]),将其添加到当前排列v中,并标记为已使用(st[i] = 1)。
    • 递归调用_helper函数生成下一个元素的排列。
    • 回溯:从当前排列v中移除最后一个元素并将其标记为未使用(st[i] = 0),以便尝试其他可能的排列。

代码

vector<vector<int>> permute(vector<int>& num) 
{vector<vector<int>> res;vector<int> st(num.size(), 0);vector<int> v;sort(num.begin(), num.end());_helper(st, v, num, res);return res;
}void _helper(vector<int>& st, vector<int>& v, vector<int>& num, vector<vector<int>>& res)
{if(v.size() == num.size()){res.push_back(v);return;}for(int i = 0; i < num.size(); ++i){if(!st[i]) {st[i] = 1;v.push_back(num[i]);_helper(st, v, num, res);v.pop_back();st[i] = 0;}}
}

复杂度

时间复杂度

生成排列的总时间复杂度为 O(N * N!),其中 N 是输入向量 num 的大小。

  • 对每个排列需要花费 O(N) 的时间来复制排列到结果向量 res 中。
  • 总共有 N! 个不同的排列。

空间复杂度

空间复杂度主要由以下几部分组成:

  1. 递归栈空间
    • 最大递归深度为 N,因为每次递归调用都将一个新元素添加到当前排列中。
  2. 辅助向量
    • stv 的空间复杂度为 O(N)
  3. 结果存储
    • res 存储所有的排列,空间复杂度为 O(N * N!)

综合考虑,空间复杂度为 O(N * N!),因为结果存储占用的空间是主要部分。

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

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

相关文章

LeetCode - 二分查找(Binary Search)算法集合(Python)[左右边界|旋转数组|双列表]

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/139419653 二分查找&#xff0c;也称为折半查找&#xff0c;是一种在有序数组中查找特定元素的高效算法。其基本原理是将待搜索的区间分成两半&am…

小猪APP分发:如何轻松进行在线封装APP

你是否曾经因为需要封装一个新版本的APP而感到头疼&#xff1f;传统的封装过程往往繁琐且耗时。但是&#xff0c;别担心&#xff0c;现在有了“小猪APP分发”&#xff0c;一切变得如此简单。 小猪APP分发www.appzhu.net是一个专门提供在线APP封装服务的平台。无论你是开发者还…

Thingsboard物联网网关接入ThingsBoard物联网平台的操作说明

本文包含关于如何配置ThingsBoard 平台和连接钡铼技术R40设备的说明。ThingsBoard平台是一个用于数据收集、处理、可视化和设备管理的开源物联网平台。它通过行业标准MQTT协议实现设备连接。ThingsBoard结合了可扩展性、容错性和性能&#xff0c;因此您永远不会丢失数据。 4G L…

因为侵权只能重装系统后的必备软件List

前因&#xff1a;自从上次被adobe警告了后&#xff0c;又被source insight警告了… 正好得升级系统&#xff0c;不如直接清清爽爽的重装系统吧&#xff0c;一切回到解放前&#xff0c;重新配置电脑&#xff0c; 该文记载了我办公必备的宝贝软件们 1、Firefox-火狐浏览器&#x…

18、matlab信号生成与预处理--剔除异常值:hampel()函数

1、语法 说明&#xff1a;对输入向量x应用Hampel滤波器来检测和去除异常值。 1&#xff09;y hampel(x) 参数&#xff1a;x&#xff1a;输入信号 y:预处理的输出信号 对于x的每个样本&#xff0c;函数计算由样本及其周围的六个样本组成的窗口的中位数&#xff0c;每边三…

PHPStudy(xp 小皮)V8.1.1 通过cmd进入MySQL命令行模式

PHPStudy是一个PHP开发环境集成包&#xff0c;可用在本地电脑或者服务器上&#xff0c;该程序包集成最新的PHP/MySql/Apache/Nginx/Redis/FTP/Composer&#xff0c;一次性安装&#xff0c;无须配置即可使用。MySQL MySQL是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL A…

元宇宙NFG结合IPO线上营销模型合理降税

在当今快速演进的互联网和区块链技术背景下&#xff0c;我们见证了从移动端购物到区块链热潮&#xff0c;再到如今市场竞争日趋激烈的变革。尤其是在2024年这个关键节点&#xff0c;许多平台为了吸引用户&#xff0c;推出了各种创新的商业模式。然而&#xff0c;如何在这样的环…

ssh远程转发22端口,使用shell工具进行连接|使用服务器地址ssh连接本地ubuntu|端口映射

☆ 问题描述 我在内网主机中&#xff0c;使用docker创建了多个虚拟机&#xff0c;我希望能通过我的公网ip服务器端口进行shell访问 ★ 解决方案 我创建一个新的虚拟机为例 1. 创建并打开容器 docker run -itd --name test ubuntu2. 进入容器 docker exec -it test /bin/b…

react 中使用 swiper

最近项目中需要用到轮播图&#xff0c;我立马想起了 swiper &#xff0c;那么本文就来带大家体验一下如何在 React 中使用这个插件&#xff0c;使用的是 函数组 hooks 的形式。 需求非常简单&#xff0c;就是一个可以自动播放、点击切换的轮播图&#xff08;跑马灯&#xff0…

心理咨询系统|心理咨询系统成品开发功能

心理咨询系统开发后端设计是一个复杂且精细的过程&#xff0c;涉及多个关键领域的专业知识和技术。本文将详细探讨心理咨询系统开发后端设计的各个方面&#xff0c;包括系统架构、数据库设计、接口开发、安全性保障以及性能优化等。 首先&#xff0c;我们来谈谈系统架构。在心理…

小白跟做江科大32单片机之光敏传感器控制蜂鸣器

代码部分 1.思路 通过光敏电阻&#xff0c;控制蜂鸣器的发声 2.butter.h代码 #ifndef _BUTTER__H #define _BUTTER__H void butter_Init(void); void butter_on(void); void butter_off(void); #endif 3.butter.c代码 #include "stm32f10x.h" void butter…

【vue】@、@/、../和./的区别

&#xff1a;表示vue语法中v-on的简写&#xff1b;绑定事件的专用格式。当事件触发的时候&#xff0c;函数才会来调用&#xff1b; /&#xff1a;在build文件夹下webpack.base.conf.js找到&#xff0c;便能知道代表什么了; 这里指向src文件夹 . /&#xff1a;表示当前目录下&…

水位雨量监测站解析

水位雨量监测站是一种集水位和雨量监测功能于一体的重要气象和水文监测设备。其设计和功能旨在实时、准确地监测和记录河流水位、降雨量等关键数据&#xff0c;为气象、水文、环保等领域提供重要的信息支持。以下是关于水位雨量监测站的详细扩写&#xff1a; 系统组成 水位雨…

SpringBoot快速部署(1)—docker不使用nginx

方法一&#xff1a;使用 link docker run -d --restartalways -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD123456 -e MYSQL_DATABASEqr_code_test -v /mnt/docker/files/qr_board_system/qr_code_test.sql:/docker-entrypoint-initdb.d/database.sql mysql:5.6 docker r…

MyBatis快速入门教程

文章目录 一、介绍什么是持久层为什么要学MyBatis&#xff1f; 二、如何获得MyBatis&#xff1f;三、第一个Mybatis程序数据库导入maven依赖bean 实体类dao持久层resources编写对应的映射文件 mybatis主配置文件测试类运行遇到报错Could not find resource com/qibu/dao/IUserD…

超越Devin!姚班带队,他们创大模型编程新世界纪录

超越Devin&#xff01;SWEBench排行榜上迎来了新玩家—— StarShip CodeGen Agent&#xff0c;姚班带队初创公司OpenCSG出品&#xff0c;以23.67%的成绩获得全球第二名的成绩。 同时创造了非GPT-4o基模的最高纪录&#xff08;SOTA&#xff09;。 我们都知道&#xff0c;SWEBe…

TinyMCE 富文本编辑器:打造个性化编辑体验

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 TinyMCE 富文本编辑器&#xff1a;打造个性化编辑体验 应用场景介绍 TinyMCE 是一款功能强大的富文本编辑器&#xff0c;广泛应用于网站内容管理、博客创作、在线文档编辑等场景。它提供了一系列丰富的编辑功…

微服务学习Day8-Sentinel

文章目录 Sentinel雪崩问题服务保护框架Sentinel配置 限流规则快速入门流控模式流控效果热点参数限流 隔离和降级FeignClient整合Sentinel线程隔离&#xff08;舱壁模式&#xff09;熔断降级 授权规则及规则持久化授权规则自定义异常结果持久化 Sentinel 雪崩问题 服务保护框架…

产品评测:Coolmuster Android Eraser - 安全彻底删除Android数据的利器

产品概述 在数字化时代&#xff0c;智能手机成为了个人敏感信息的集中地。当涉及到数据隐私和安全时&#xff0c;简单的删除操作并不能满足我们对数据彻底清除的需求。Coolmuster Android Eraser正是为了解决这一问题而生&#xff0c;它是一款专为Android设备设计的第三方软件&…

活动预告|6月13日Apache Flink Meetup·香港站

6 月 13 日 | 香港 | 线下 Apache Flink Meetup 的风吹到了香江之畔&#xff0c;Apache Flink 香港 Meetup 来啦&#xff01;本次活动&#xff0c;我们邀请了来自阿里云的顶尖专家&#xff0c;帮助开发者全面了解 Apache Flink 的流批一体的数据处理能力&#xff0c;流式数据湖…