力扣每日一题46:全排列

news2025/7/7 8:05:39

题目描述:

给定一个不含重复数字的数组 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 中的所有整数 互不相同

通过次数

944.6K

提交次数

1.2M

通过率

79.0%

思路和题解:

就是给你n个不重复的数字,让你把这些数字的所有排列情况给返回。

方法一:用next_permutation函数

c++在头文件<algorithm>里有个函数next_permutation,可以将按字母表生成的给定序列的下一个较大的排列,直到整个序列为降序为止。所以我们可以先将nums数组升序排序,排好后再使用next_permutation将每一种排序赋给返回值即可。记住刚开始一定要先给nums数组排序排成最小的,否则不会输出比nums更小的排序。

class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> ans;
        sort(nums.begin(),nums.end());
        do{
            ans.emplace_back(nums);
        }while(next_permutation(nums.begin(),nums.end()));
        return ans;
    }
};

方法二:回溯法(递归法)

回想以下我们高中的时候计算Ann(就是n个不同东西的排列方式有几种)怎么算的。第一个位置n个选择,然后第二个位置剩下n-1个选择......最后一个位置只有一个选择,最终结果是n*(n-1)*(n-2)*......*1。用这个思想我们可以用递归的方法以此确定每个位置放置的数字,当某个位置放某个特定的数的排列排完后,就放其他没放过的数。

代码:

vector<int> Stack; //存放每一种标记
int visited[7];    //对有没有用过第i个数进行标记
class Solution {
public:
    void dfs(vector<vector<int>>& ans,vector<int> nums,int depth,int n)
    {
        if(depth==n)
        {//n个位置都选好了,就完成一次
            ans.emplace_back(Stack);
            return ;
        }
        for(int i=0;i<n;i++)
        {
            if(visited[i]==0)
            {
                //之前没有选过,现在就可以选了
                visited[i]=1;
                Stack.push_back(nums[i]);
                //选好depth这个位置后递归下一层选depth+1这个位置
                dfs(ans,nums,depth+1,n);
                //下一层递归结束后返回,depth这个位置重新选,堆栈的depth位置也抛出。即回溯
                //回溯的关键
                visited[i]=0;
                Stack.pop_back();
            }
        }
    }
    vector<vector<int>> permute(vector<int>& nums) {
        int n=nums.size();
        vector<vector<int>> ans;
        for(int i=0;i<n;i++) visited[i]=0;
        dfs(ans,nums,0,n);
        return ans;
    }
};

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

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

相关文章

类加载的过程总结以及双亲委派模型[JVM]

类加载过程 类一共有七个生命周期:加载->验证->准备->解析->初始化->使用->卸载 加载&#xff08;加载字节码文件&#xff0c;生成.class对象&#xff09; 加载是类加载的第一个阶段。 加载阶段的任务是在类文件从磁盘加载到内存中&#xff0c;通常是从cl…

【学习笔记】RabbitMQ04:延迟队列的原理以及实现代码

参考资料 RabbitMQ官方网站RabbitMQ官方文档噼咔噼咔-动力节点教程 文章目录 七、延迟队列7.1 什么是延迟队列7.2 延迟队列的解决方案7.2.1 定时任务7.2.2 **被动取消**7.2.3 JDK的延迟队列7.2.3 采用消息中间件&#xff08;rabbitMQ7.2.3.1 适用专门优化后的死信队列实现延迟队…

防火墙规则顺序解决方案

防火墙是保护网络免受攻击的第一道防线&#xff0c;防火墙对互联网和公司IT网络之间的流量拥有绝对控制权&#xff0c;防火墙规则的配置处理调节流量的关键任务。 这些规则会仔细检查传入和传出流量&#xff0c;并根据规则中提到的条件允许或阻止它&#xff0c;防火墙规则越严…

leetCode 5. 最长回文子串 动态规划 + 优化空间 / 中心扩展法 + 双指针

5. 最长回文子串 - 力扣&#xff08;LeetC5. 最长回文子串 - 力扣&#xff08;LeetCode&#xff09;5. 最长回文子串 - 力扣&#xff08;LeetC 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。…

制造企业如何做好MES管理系统需求分析

随着制造业的不断发展&#xff0c;制造企业对于生产过程的管理需求日益增长。为了提高生产效率和质量&#xff0c;越来越多的制造企业开始关注MES生产管理系统的需求分析。本文将从以下几个方面探讨制造企业如何做好MES管理系统需求分析。 一、明确需求 在进行MES管理系统需求…

利用PHP快速抓取音频数据的方法与技巧

目录 使用cURL库抓取音频数据 优点 潜在问题及解决方案 使用file_get_contents函数抓取音频数据 优点 潜在问题及解决方案 总结 随着互联网的发展&#xff0c;音频内容在网络上的应用越来越广泛&#xff0c;如音乐播放、语音通信等。有时&#xff0c;我们需要从特定的音…

电脑缺失dll文件有什么办法快速解决,dll文件是什么

玩游戏时经常会出现dll文件缺失&#xff0c;那么dll文件是什么&#xff1f;都有哪些办法可以解决dll文件缺失&#xff1f;今天就带大家了解dll文件以及解决dll文件缺失的办法&#xff0c;看完这篇文章相信你会有很大收获&#xff0c;接下来往下看。 一.Dll文件 Dll文件是VC运…

互联网Java工程师面试题·Java 总结篇·第二弹

目录 12、用最有效率的方法计算 2 乘以 8&#xff1f; 13、数组有没有 length()方法&#xff1f;String 有没有 length()方法&#xff1f; 14、在 Java 中&#xff0c;如何跳出当前的多重嵌套循环&#xff1f; 15、构造器&#xff08;constructor&#xff09;是否可被重写&…

汽车安全的未来:毫米波雷达在碰撞避免系统中的角色

随着科技的飞速发展&#xff0c;汽车安全系统变得愈加智能化&#xff0c;而毫米波雷达技术正是这一领域的亮点之一。本文将深入探讨毫米波雷达在汽车碰撞避免系统中的关键角色&#xff0c;以及其对未来汽车安全的影响。 随着城市交通的拥堵和驾驶环境的变化&#xff0c;汽车安全…

腾讯云入选挑战者象限,2023 Gartner容器管理魔力象限发布

10月17日&#xff0c;记者获悉&#xff0c;腾讯云入围在Gartner刚刚发布的2023《容器管理魔力象限》报告&#xff08;Magic Quadrant™ for Container Management&#xff09;中&#xff0c;并位列挑战者象限&#xff0c;执行力维度排名国内第二。 Gartner的魔力象限报告是业界…

Spring: 通过注解获取Bean对象

目录 一, 属性注入 属性注入的优点: 属性注入的缺点 二. Setter注入 Setter注入的优点: Setter注入的缺点: 三, 构造方法注入 (主流方式) 构造方法注入的优点 构造方法注入的缺点 四, Autowired与Resource区别 获取Bean对象也叫对象注入(对象装配), 指把对象取出来放…

阿里云starrocks监控告发至钉钉群

背景&#xff1a;新入职一家公司&#xff0c;现场没有对sr的进行监控&#xff0c;根据开发的需求编写了一个python脚本。 脚本逻辑&#xff1a;抓取sr的be/fe/routine load状态信息&#xff0c;判读是否触发告警&#xff0c;若满足告警条件&#xff0c;则发送告警信息到钉钉群…

C# GFPGAN 图像(人脸面部)修复

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms;namespace 图像修复 {pu…

小程序首页搭建

小程序首页搭建 1. Flex布局是什么&#xff1f;2. 容器的属性2.1 flex-direction属性2.2 flex-wrap属性2.3 flex-flow属性2.4 justify-content属性2.5 align-items属性2.6 align-content属性 二.首页布局搭建二.1moke模拟数据实现轮播图4.信息搭建 Flex弹性布局 1. Flex布局是…

iperf3交叉编译

简介 iperf3是一个用于执行网络吞吐量测量的命令行工具。它支持时序、缓冲区、协议&#xff08;TCP&#xff0c;UDP&#xff0c;SCTP与IPv4和IPv6&#xff09;有关的各种参数。对于每次测试&#xff0c;它都会详细的带宽报告&#xff0c;延迟抖动和数据包丢失。 如果是ubuntu系…

[ConvNet]卷积神经网络概念解析

在初步接触了深度学习以后&#xff0c;我们把目光投向对于一些图像的识别。 其实在d2l这本书中&#xff0c;我们接触过用深度神经网络去识别一个图像&#xff0c;并且对其进行一个分类操作&#xff0c;核心原理是将图像展开成一维tensor&#xff0c;然后作为特征进行检测。 其…

JAVA基础(JAVA SE)学习笔记(二)变量与运算符

前言 1. 学习视频&#xff1a; 尚硅谷Java零基础全套视频教程(宋红康2023版&#xff0c;java入门自学必备)_哔哩哔哩_bilibili 2023最新Java学习路线 - 哔哩哔哩 正文 第一阶段&#xff1a;Java基本语法 1. Java 语言概述 JAVA基础&#xff08;JAVA SE&#xff09;学习…

源码解析flink文件连接源TextInputFormat

背景&#xff1a; kafka的文件系统数据源可以支持精准一次的一致性,本文就从源码看下如何TextInputFormat如何支持状态的精准一致性 TextInputFormat源码解析 首先flink会把输入的文件进行切分&#xff0c;分成多个数据块的形式&#xff0c;每个数据源算子任务会被分配以读取…

【面试经典150 | 区间】插入区间

文章目录 Tag题目解读题目来源解题思路方法一&#xff1a;合并区间方法二&#xff1a;模拟 其他语言python3 写在最后 Tag 【模拟】【数组】 题目解读 给定一个含有多个无重叠区间的数组&#xff0c;并且数组已经按照区间开始值升序排序。在列表中插入一个新的区间&#xff0…

unity动画_UI动画案例 c#

首先我们打开一个项目 在这个初始界面我们需要做一些准备工作 创建基础通用包 在场景上创建一个Cube 选中Cube 在Window下点击Animation拖拽至运行窗口 点击创建 保存后 这个操作是给Cube添加了一个组件 对Cube_添加一个Position动画 设置几个帧位置的坐标(x,y,z)值 点击运行测…