题目连接:Leetcode 031 Next Permutation
解题思路:从左向右遍历,找到第一个数值比它左边大的位置idx,然后在idx~n中选一个最小的,但是比nums[idx-1] 大的数放在idx-1的位置,然后剩下的数排序放在idx~n。如果找不到idx,说明是字典序最大的排序。
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int n = nums.size();
int idx = n - 1;
while (idx && nums[idx-1] >= nums[idx]) idx--;
if (idx) {
int p = n - 1;
while (p >= idx && nums[p] <= nums[idx-1]) p--;
int tmp = nums[idx-1];
nums[idx-1] = nums[p];
nums[p] = tmp;
sort(nums.begin() + idx, nums.end());
} else {
sort(nums.begin(), nums.end());
}
}
};