46. 全排列(力扣LeetCode)

文章目录

  • 46. 全排列
    • 题目描述
    • 回溯算法

46. 全排列

题目描述

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

示例 1:

输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

示例 2:

输入:nums = [0,1]
输出:[[0,1],[1,0]]

示例 3:

输入:nums = [1]
输出:[[1]]

提示:

  • 1 <= nums.length <= 6
  • -10 <= nums[i] <= 10
  • nums 中的所有整数 互不相同

回溯算法

class Solution {
public:vector<vector<int>> permute(vector<int>& nums) {vector<bool> used(nums.size(), false);  // 创建一个布尔数组,用来标记nums中的元素是否被使用过backtracking(nums, used);               // 调用回溯函数开始递归return result;                          // 返回最终的全排列结果}private:vector<vector<int>> result;  // 用来存储所有的排列组合vector<int> path;            // 用来存储当前的排列组合// 回溯函数void backtracking(vector<int>& nums, vector<bool>& used) {// 如果当前的排列组合长度等于nums的长度,说明找到了一个完整的排列if (path.size() == nums.size()) {result.push_back(path);  // 将当前排列加入到结果列表return;                   // 返回上一层递归}// 遍历nums的每个元素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;  // 将当前元素标记为未使用,以便于下一次循环能够使用}}
};

代码的核心逻辑是回溯算法,它通过递归来试探和回撤,在每一步尝试不同的数值,并在填满一种排列后将其加入结果集中,然后撤销最后的选择,回到上一步,再尝试其他未被选择的数值。这个过程一直持续到所有的数都尝试过为止。

  • used数组用来标记某个数字是否已经在当前的排列中被使用过,以避免产生重复的排列。
  • path用来存放当前正在构建的排列。
  • result用来存放所有可能的排列。

整个算法的时间复杂度为O(n*n!),其中n为数组nums的长度。因为有n!(阶乘)个排列,而生成每个排列需要O(n)的时间。

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

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

相关文章

深度学习目标检测】二十二、基于深度学习的肺炎检测系统-含数据集、GUI和源码(python,yolov8)

肺炎尽管很常见&#xff0c;但准确诊断是一项困难的任务。它要求训练有素的专家对胸部X光片进行检查&#xff0c;并通过临床病史&#xff0c;生命体征和实验室检查进行确认。肺炎通常表现为胸部X光片上一个或多个区域的阴影(opacity)增加。但是&#xff0c;由于肺部有许多其他状…

每日OJ题_链表①_力扣2. 两数相加

目录 力扣2. 两数相加 解析代码 力扣2. 两数相加 2. 两数相加 难度 中等 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个…

【Python】创建python库的学习笔记

1. 约定俗成的目录结构 根目录下的setup.py&#xff1a;在根目录下包含一个setup.py文件&#xff0c;用于指定项目的依赖关系、包信息以及其他安装和分发相关的元数据。例如&#xff0c;pyminitouch/setup.py。与库同名的代码目录&#xff1a;建立与库同名的代码文件夹&#x…

二维码门楼牌管理系统应用场景:数据管理的智慧新选择

文章目录 前言一、数据管理部门的智慧工具二、助力决策制定与优质服务提供三、二维码门楼牌管理系统的优势四、展望未来 前言 随着科技的飞速发展&#xff0c;二维码门楼牌管理系统正逐渐成为城市管理的智慧新选择。该系统不仅提升了数据管理效率&#xff0c;还为政府和企业提…

linux中怎么用shell逐行读取文件

在Linux中,可以使用shell脚本逐行读取文件。有多种方法可以实现这个功能,下面是几个常见的方法: 方法一:使用while循环和read命令逐行读取文件 #!/bin/bash file="filename.txt" while IFS= read -r line doecho "$line" done < "$file"…

python并发编程:阻塞IO

阻塞IO&#xff08;blocking IO&#xff09; 在Linux中&#xff0c;默认情况下所有的socket都是blocking&#xff0c;一个典型的读操作流程大概是这样&#xff1a; 当用户进程调用了recvfrom这个系统调用&#xff0c;kernel就开始了IO的第一个阶段&#xff1a;准备数据。对于…

[编码] Base64基础知识

文章目录 Base64编码解码原理参考 Base64编码解码原理 首先有一个64个字符的转换表。 待转转换的数据&#xff0c;3个字节位一组&#xff0c;3个字节24位&#xff0c;刚好可以分成4个6位的对象&#xff0c; 每个6位对象前补2个0&#xff0c;就变成了4个字节。这就可以对应转换…

Python编程作业五:面向对象编程

目录 一、类的定义和方法 二、图书管理系统 一、类的定义和方法 定义一个学生类&#xff08;Student&#xff09;&#xff0c;包括学号(id)、姓名(name)、出生日期(birthday)和分数(score)4个属性&#xff0c;其中出生日期是私有属性&#xff0c;不能被外界直接访问。该类应具…

力扣每日一题 找出字符串的可整除数组 数论

Problem: 2575. 找出字符串的可整除数组 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 灵神题解 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code class Solution {public int[] divisibilityArray(String word, int m){in…

销冠MPV增配不增价,2024款腾势D9正式上市

3月6日&#xff0c;2024款腾势D9正式上市&#xff0c;官方指导价33.98万元起。销冠MPV增配不增价&#xff0c;并推出2000元定金抵扣车辆尾款10000元等上市权益。针对老用户也推出了30000元置换补贴等感恩回馈。 作为腾势汽车破局豪华MPV全品类冠军的扛鼎之作&#xff0c;腾势D9…

【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit

1.问题描述 在App中供用户在地图上选择地址&#xff0c;目前在使用Map Kit结合geolocationManager逆地理编码时获取的地址信息描述不准确&#xff0c;希望能提供相应的Demo参考。 解决方案 Demo代码示例&#xff1a; getLocation() { let requestInfo: geoLocationManager.…

异地组网搭建方案

在这个信息爆炸的时代&#xff0c;人与人之间的联系变得越来越密切&#xff0c;而异地组网搭建方案也因此变得越 来越重要。无论是跨国企业、远程学习还是国际合作&#xff0c;构建一个快捷稳定的异地组网系统&#xff0c;已经 成为许多组织和个人不可或缺的需求。接下来&#…

换个角度看禅让制止于禹

前言 在历史课本上&#xff0c;对尧、舜、禹三代君王的描述是&#xff0c;他们在去世之前通过禅让制的方式把自己的王位禅让给了其他有贤明的能臣。 禅让制也是中国古代时期被无数的文人志士追捧的一个制度&#xff0c;因为他们觉得那个时代是公天下的时代。 可实际上自从人…

selenium中ChromeDriver配置,一把过,并且教你伪装

最近正值毕业季&#xff0c;我之前不是写了个问卷星代码嘛&#xff0c;昨晚上有人凌晨1点加我&#xff0c;问我相关内容。 由于我之前C盘重装了一下&#xff0c;导致我很多东西空有其表&#xff0c;实际不能用&#xff0c;借此机会&#xff0c;向大家编写ChromeDriver配置&…

libftdi库编译

目录 1. 下载源码 2. Ubuntu下编译 2.1 配置编译环境 2.2 编译 3. Android NDK下编译 3.1 编译libconfuse 3.2 编译libusb 3.3 编译libudev 3.3 编译libftdi 分2部分&#xff0c;先在Ubuntu中编译&#xff0c;然后在Android NDK中编译。 1. 下载源码 下载地址&#…

扩展学习|系统理解数字经济

文献来源&#xff1a;[1]肖静华,胡杨颂,吴瑶.成长品&#xff1a;数据驱动的企业与用户互动创新案例研究[J].管理世界,2020,36(03):183-205.DOI:10.19744/j.cnki.11-1235/f.2020.0041. [2]陈晓红,李杨扬,宋丽洁等.数字经济理论体系与研究展望[J].管理世界,2022,38(02):208-22413…

2024回归路径规划学习之路

A星算法详解(个人认为最详细,最通俗易懂的一个版本)-CSDN博客

链表习题-力扣oj (附加思路版)

LCR 140. 训练计划 IIhttps://leetcode.cn/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/ 给定一个头节点为 head 的链表用于记录一系列核心肌群训练项目编号&#xff0c;请查找并返回倒数第 cnt 个训练项目编号。 思路&#xff1a;双指针&#xff0c;快指针先走cnt…

策略梯度网络

策略梯度网络是强化学习中的一类算法,它们直接学习一个策略,该策略可以映射从环境状态到采取的动作。与值函数方法(如Q学习和深度Q网络)不同,策略梯度方法通过优化策略本身来实现目标,即直接调整其输出动作的概率,以最大化累积奖励。这类方法的核心优势在于它们能够自然…

007-常见HTTP状态码

常见HTTP状态码 常见状态码说明常见状态码 常见状态码说明 状态码说明1xx&#xff08;informational&#xff09;信息性状态码&#xff0c;表示正在处理2xx&#xff08;success&#xff09;成功状态码&#xff0c;表示请求正常3xx&#xff08;redirection&#xff09;重定向状…