class Solution {
public:
// 8 4 7 6 5 3 1
void nextPermutation(vector<int>& nums) {
int len = nums.size();
int i,j;
for(i=len-2;i>=0;--i) //找4
{
if(nums[i]<nums[i+1])
break;
}
if(i<0) //都按升序排列
reverse(nums.begin(),nums.end());
else
{
for(j=len-1;j>i;--j) //找5
{
if(nums[j]>nums[i])
break;
}
swap(nums[i],nums[j]);
reverse(nums.begin()+i+1,nums.end()); //反序76431
}
}
};
参考
https://leetcode.com/problems/next-permutation/discuss/13867/C%2B%2B-from-Wikipedia