问题:
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 examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.
1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1void nextPermutation(vector<int> &num)
{
if(num.size() <= 1)
return;
int i = num.size() - 1;
while ( i > 0)
{
if(num[i] > num[i - 1])
{
int ii = num.size() - 1;
while (ii >= i && num[ii] < num[i - 1]) --ii;
swap(num[i - 1], num[ii]);
reverse(num.begin() + i, num.end());
return;
}
--i;
}
reverse(num.begin(), num.end());
return;
}
本文介绍了一个在位调整数组的方法,使其变为字典序中下一个更大的排列。如果不存在这样的排列,则将其调整为最小的排列(升序)。该算法首先从右到左找到第一个不再递增的元素,然后将它与右侧比其大的最小元素交换,并将剩余部分反转。
418

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



