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

}
相关推荐
syagain_zsx2 分钟前
spdlog实战:日志分级、滚动与性能调优
linux·c++·日志库·二次开发日志库
WJ.Polar18 小时前
Java封装、继承、多态
java·开发语言
摇滚侠18 小时前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
weixin_3077791318 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
AI wins18 小时前
c++新增頭文件
c++
Shadow(⊙o⊙)18 小时前
仿muduo实现高并发服务器——事件就绪管理Channel.hpp
服务器·c++
爱读书的小胖18 小时前
Codewars:Rot13(C)解题分析
c语言·开发语言
鸽鸽程序猿18 小时前
【项目】【在线判题系统】b端题目增删改
开发语言·python
by2099919 小时前
哈希表——快速找到数据:冲突、删除与扩容的实现
数据结构·c++·哈希算法·散列表
Lhappy嘻嘻19 小时前
读懂 JVM:内存模型、类加载机制、分代回收
java·开发语言·jvm