这道题是要求所给序列按照字典序比较的下一个最小的序列。先考虑怎么样让当前序列变大?很简单,就是找到某一个元素,把它替换成来自它后面的元素中比它大的元素。那么,怎么得到最小的下一个序列呢?方法就是从倒数第二位开始找,先把它后面的元素按字典序排序,然后把它替换成它后面的元素中刚好比它大的元素即可。如果找不到比它大的,再遍历倒数第三位,以此类推。如果遍历完整个vector都没有,只能做完整的排序并返回。代码如下:
void nextPermutation(vector<int>& nums) {
int index = nums.size() - 2;
vector<int>:: iterator it = nums.end() - 1;
while(index >= 0){
sort(it, nums.end());
for (int i = index + 1; i < nums.size(); ++i)
{
if(nums[i] > nums[index]){
int x = nums[i];
nums[i] = nums[index]; nums[index] = x;
return ;
}
}
index--;
it--;
}
sort(nums.begin(), nums.end());
}