字典序全排列:
从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
例如:
1 、2 、3三个元素的全排列为:
{1,2,3},{1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}。
思路:
从后向前找出第一个num[i]小于num[i+1]的数,将num[i]与num[i+1:len-1]中最小的大于num[i]的数交换,然后将num[i+1:len-1]排序。
代码:
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int len=nums.size();
int cur=len-1;
for(int i=len-2; i>=0; i--){
if(nums[i] < nums[i+1]){
int left=i+1, right=len-1;
while(left <= right){
int mid=left+(right-left)/2;
if(nums[mid] > nums[i]) left = mid+1;
else right = mid-1;
}
swap(nums[i], nums[right]);
sort(nums.begin()+i+1, nums.end());
return;
}
}
reverse(nums.begin(), nums.end());
return ;
}
};