实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数)。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。
Leetcode链接
class Solution {
public:
void nextPermutation(vector<int>& nums)
{
if (nums.size() < 2)
{
return;
}
int n = nums.size();
int i = n - 2;
//从后找出比前一个要大的数字
while (i >= 0 && nums[i] >= nums[i + 1])
{
i--;
}
//这个就是最大的排序
if (i == -1)
{
reverse(nums.begin(), nums.end());
return;
}
int j = n - 1;
//从i开始,向后找出比i小的一个数字
while (j > i && nums[j] <= nums[i])
{
j--;
}
swap(nums[i], nums[j]);
reverse(nums.begin() + i + 1, nums.end());
return;
}
};
倒叙找出相对后面“最大”的两个数字,交换后排序