LeetCode 热题 HOT 100之下一个排列
题目31:实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数)。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须 原地 修改,只允许使用额外常数空间。
方案:找到降序数组,替换降序数组前的一个值和降序数组中比这个值大的值,然后对降序数组变成升序数组。
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int size=nums.size();
int i=size-2;
while(i>=0 && nums[i]>=nums[i+1]){
i--;
}
if(i>=0){
int j=size-1;
while(j>=0 && nums[i]>=nums[j]){
j--;
}
swap(nums[i],nums[j]);
}
reverse(nums.begin()+i+1,nums.end());
}
};
来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。