当前位置: 首页 > news >正文

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:void hs(vector<vector<int>>& res,vector<int>& r,int f,int l){//res是结果,r是现在的排列数组,f是当前位置,l是数组长度if(f==l)//已经有了一个完整的排列{res.emplace_back(r);return;}for(int i=f;i<l;i++){swap(r[i],r[f]);//交换i和first的位置hs(res,r,f+1,l);//处理下一个位置swap(r[i],r[f]);//恢复原来的顺序}}vector<vector<int>> permute(vector<int>& nums) {vector<vector<int>> res;hs(res,nums,0,(int)nums.size());return res;}
};

相关文章:

  • Mysql之存储过程
  • 多源数据集成技术分析与应用实践探索
  • DeepSeek在物联网设备中的应用:通过轻量化模型实现本地化数据分析
  • 达妙电机CAN通信及实验
  • 努比亚Z70S Ultra 摄影师版将于4月28日发布,首发【光影大师990】传感器
  • GPLT-2025年第十届团体程序设计天梯赛总决赛题解(共计266分)
  • Go全栈_Golang、Gin实战、Gorm实战、Go_Socket、Redis、Elasticsearch、微服务、K8s、RabbitMQ全家桶
  • Laravel 自定义 Artisan 命令行
  • Qt案例 使用QFtpServerLib开源库实现Qt软件搭建FTP服务器,使用QFTP模块访问FTP服务器
  • TORL:解锁大模型推理新境界,强化学习与工具融合的创新变革
  • 第六章 QT基础:3、QT的打包和部署
  • 在串的简单模式匹配中,当模式串位j与目标串位i比较时,两字符不相等,则i的位移方式是?
  • 《数据结构世界的乐高积木:顺序表的奇幻旅程》
  • MySQL常见问题解答
  • SQL 多表查询:数据整合与分析的强大工具
  • Java实现插入排序算法
  • C++学习:六个月从基础到就业——STL算法(一) 基础与查找算法
  • 23种设计模式-结构型模式之享元模式(Java版本)
  • Java并发编程之CompletableFuture原理与实践
  • 杭电oj(1087、1203、1003)题解
  • 俄总理:2024年俄罗斯GDP增长4.3%
  • 18米巨作绘写伏羲女娲,安徽展石虎最后十年重彩画
  • “仅退款”将成过去时!多个电商平台集体修改售后规则,商家获得更多自主权
  • 直播中抢镜“甲亢哥”的翁东华卸任了!此前任文和友小龙虾公司董事
  • 上海银行换帅:顾建忠出任党委书记,金煜辞任董事长
  • 中国与柬埔寨签署多领域合作文件