1. 思路
这个题目其实就是找规律,多列几组数据就会发现:
从右到左找到第一个S[i] < S[i+1]的位置,然后将S[i] ~ S[n]从小到大排序,再将S[i] ~ S[n]中第一个大于S[i]的数和S[i]交换即可。
2.代码
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int size = nums.size(), i;
for(i = size - 2; i >= 0; --i)
{
if(nums[i] < nums[i+1])
{
break;
}
}
int l = i + 1, r = size - 1;
while(l < r)
{
nums[l] ^= nums[r] ^= nums[l] ^= nums[r];
l++; r--;
}
if(i >= 0)
{
l = i;
while(nums[++l] <= nums[i]);
nums[l] ^= nums[i] ^= nums[l] ^= nums[i];
}
}
};