目录
一、问题描述
输入一组数字(可能包含重复数字),输出其所有的排列方式。
数据范围
输入数组长度 [0,6]。
样例
输入:[1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
二、解题
1.代码
class Solution {
public:
vector<vector<int>> permutation(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<vector<int>> res;
do
{
res.push_back(nums);
}while(next_permutation(nums.begin(),nums.end()));
return res;
}
};
next_permutation()
范围中的元素重新排列
[first,last)
为下一个字典顺序更大的排列。排列是元素可以采用的每一种可能的排列方式(其中N是范围内的元素数)。可以根据它们在字典上相互比较的方式对不同的排列进行排序;第一个这样排序的可能排列(按字典顺序比较小于所有其他排列的排列)是所有元素按升序排序的排列,最大的排列是所有元素按降序排列的。 单个元素的比较使用以下任一方法进行N!