Next Permutation

Posted RenewDo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Next Permutation相关的知识,希望对你有一定的参考价值。

不懂为什么这么做

在当前序列中,从尾端向前寻找两个相邻元素,前一个记为*i,后一个记为*t,并且满足*i < *t。然后再从尾端

寻找另一个元素*j,如果满足*i < *j,即将第i个元素与第j个元素对调,并将第t个元素之后(包括t)的所有元

素颠倒排序,即求出下一个序列了。

  STL中有这个next_permutation函数

 

 1 class Solution {
 2 public:
 3     void nextPermutation(vector<int>& nums) {
 4         if(nums.size()<2) return;
 5         int i,k;
 6         for(i= nums.size()-2;i>=0;--i)
 7          if(nums[i]<nums[i+1])
 8          break;
 9          for(k=nums.size()-1;k>i;--k)
10          if(nums[i]<nums[k])
11          break;
12          if(i>=0) swap(nums[i],nums[k]);
13          reverse(nums.begin()+i+1,nums.end());
14     }
15 };

 

以上是关于Next Permutation的主要内容,如果未能解决你的问题,请参考以下文章

next_permutation 与 prev_permutation(全排列算法)

全排列 next_permutation() 函数的用法

hdu1716(库函数next_permutation)

LeetCode 31 Next Permutation(下一个全排列)

prev_permutation()和next_permutation()

Gym - 101020H Weekend floyd+next_permutation