【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;

}
相关推荐
clint4561 天前
C++进阶(1)——前景提要
c++
夜悊2 天前
C++代码示例:进制数简单生成工具
c++
郝学胜_神的一滴2 天前
CMake 021: IF 条件判据详诠
c++·cmake
_wyt0012 天前
洛谷 B3930 [GESP202312 五级] 烹饪问题 题解
c++·gesp
LDR0062 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术2 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园2 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob2 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享2 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.2 天前
C语言--day30
c语言·开发语言