标签:思路 href for 个数 序列 blank 输入 从后往前 存在
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须原地修改,只允许使用额外常数空间。
以下是一些例子,输入位于左侧列,其相应输出位于右侧列。
1,2,3
→ 1,3,2
3,2,1
→ 1,2,3
1,1,5
→ 1,5,1
由于各个排列按照字典序排序,所以以 1,3,2
→ 2,1,3为例,
寻找下一个排列的步骤是:
在第一步中,若遍历到数组头部仍未找到升序对,说明不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
1 class Solution { 2 public: 3 void nextPermutation(vector<int>& nums) { 4 for(int i = nums.size() - 1; i >= 0; i--){ 5 if(i == 0) 6 sort(nums.begin(), nums.end()); 7 else if(nums[i] > nums[i - 1]){ 8 int minIdx = nums.size() - 1; 9 while(nums[i - 1] >= nums[minIdx]) 10 minIdx--; 11 swap(nums[minIdx], nums[i - 1]); 12 sort(nums.begin() + i, nums.end()); 13 break; 14 } 15 } 16 } 17 };
LeetCode 31. 下一个排列(Next Permutation)
标签:思路 href for 个数 序列 blank 输入 从后往前 存在
原文地址:https://www.cnblogs.com/wmx24/p/9190853.html