【C++】数组篇

全排列


先排序 → 循环生成下一个排列 → 全部存起来 → 完成全排列

3 个关键点

  1. 必须先排序 让数组变成最小顺序,next_permutation 才能生成所有排列。

  2. 用 do-while 循环 先存第一个排列,再不断生成下一个,不会漏掉。

  3. 核心函数 next_permutation 自动生成下一个排列,生成完返回 false,循环结束。

知识点

方法字典序法(next_permutation)

从最小顺序开始,不断找 "下一个稍微大一点" 的排列,直到找不到为止。

复制代码
vector<vector<int>> permute(vector<int>nums)
{
	//定义二维数组来存结果
	vector<vector<int>>res;
	
	//第一步先排序
	sort(nums.begin(), nums.end());
	//第二部
	//搞个do while循环,生成所有排列
	//排列函数 next_permutation
	do
	{
		res.push_back(nums);  //先把排序好的数组放进结果里
	} while (next_permutation(nums.begin(), nums.end()));
	//成功生成下一个排列 true 循环继续
	//已经是最后一个排列,返回false 循环结束

	return res;

}
相关推荐
ambition2024243 分钟前
操作系统同步:读者-写者问题与读写公平法详解(附每个 PV 操作含义)
linux·开发语言·数据结构·unix
chuan.bai3 小时前
Java RAG 实战(第 11 篇):RAG 知识工作台网页
java·开发语言·人工智能
离陌在学C#6 小时前
C# 事件(Event)详解:从概念到实战
开发语言·c#
Terra.K6 小时前
Java异常学习[特殊字符]
java·开发语言·学习
葡萄城技术团队8 小时前
InfluxDB 2\.x 深度解析:核心架构、Flux 函数与制造业落地指南(三)
java·开发语言·架构
counting money8 小时前
Java IO流详解:从InputStream到文件操作实战
java·开发语言·python
wuyk5558 小时前
98.C语言易混难点:字符数组与字符串指针的底层差异
c语言·开发语言·c++·stm32·嵌入式硬件·算法
峥无8 小时前
从0到1手撕红黑树:封装实现 my_map 与 my_set(SGI-STL 源码级深度解析)
开发语言·c++·笔记·算法·stl
波特率1152008 小时前
C++新特性---属性说明符与标准属性
开发语言·c++
程序员小八7779 小时前
上海百度B端java后端日常实习一面
java·开发语言