题目链接:https://leetcode.com/problems/next-permutation/
题意:找出序列的下一个字典序排列
思路:从右往左找到第一个满足a[i-1]<a[i]的两个数,然后找到a[i-1]右边恰好大于它的数,并和它交换,最后将a[i-1]右边的所有数排序

代码:
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int flag = 0;
for(int i = nums.size()-1; i>=1; i--){
if(nums[i-1]<nums[i]){
flag = 1;
sort(nums.begin()+i,nums.end());
int j = upper_bound(nums.begin()+i,nums.end(),nums[i-1])-nums.begin();
swap(nums[i-1],nums[j]);
sort(nums.begin()+i,nums.end());
break;
}
}
if(flag == 0){
sort(nums.begin(),nums.end());
}
}
};
本文解析了LeetCode上一道经典题目“下一个排列”的解题思路。通过从右往左遍历序列,寻找第一个满足升序条件的元素对,之后找到右边恰好大于该元素的数并进行交换,最后对交换后的子序列进行排序,从而得到序列的下一个字典序排列。
&spm=1001.2101.3001.5002&articleId=88553634&d=1&t=3&u=a1e7791517fd4d7aac520fbb770e26ae)
488

被折叠的 条评论
为什么被折叠?



