题目链接:31. 下一个排列 - 力扣(LeetCode)
就是要找这堆数字的组合中下一个较大的数,比如1243的下一个排列是1342,那怎么得到的,就是把大数放前面小数放后面这个数自然就大了,如果要接近的大,那么应该从最右边开始找一个更小一点的数,然后找第二小的数,把第二小的数和第一小的数交换
如果找到一个小的,那么说明右边的都是降序排序好的了,第二小的就是从右边开始找到第一个比刚刚找到的小数大的,并且交换之后还需要重新升序排序一下后面部分的,让这个大数变小一些
class Solution {
public:void nextPermutation(vector<int> &nums) {int small = nums.size() - 2;while (small >= 0 && nums[small] >= nums[small + 1])small--;int big = nums.size() - 1;if (small >= 0) { // 交换小的和较大的while (nums[big] <= nums[small])big--;swap(nums[big], nums[small]);}reverse(nums.begin() + small + 1, nums.end());}
};