#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
/*
Implement next permutation, which rearranges numbers into the lexicographically
next greater permutation of numbers.
If such arrangement is not possible, it must rearrange it as the lowest possible
order (ie, sorted in ascending order).
The replacement must be in-place, do not allocate extra memory.
Here are some example.Inputs are in the left-hand column and its corresponding
outputs are in the right hand column.
1, 2, 3 -> 1, 3, 2
3, 2, 1 -> 1, 2, 3
1, 1, 5 -> 1, 5, 1
The given example actually is not that clear.
Think about this one: 1, 3, 2 -> 2, 1, 3 the process is first locate "1" position. swap(1, 2) and reverse the following.
*/
vector<int> nextPermutation(vector<int> nums) {
int k = nums.size() - 2;
while(k >= 0 && nums[k] >= nums[k+1]) {
k--;
}
if(k == -1) {
return {};
}
for(int i = nums.size() - 1; i > k; --i) {
if(nums[i] > nums[k]) {
swap(nums[i], nums[k]);
break;
}
}
reverse(nums.begin() + k + 1, nums.end());
return nums;
}
int main(void) {
vector<int> nums{1, 3, 2};
vector<int> res = nextPermutation(nums);
for(int i = 0; i < res.size(); ++i) {
cout << res[i] << " ";
}
} 1,1 Top
LeetCode 31. Next Permutation
最新推荐文章于 2020-10-03 00:35:45 发布