思路:全排列,调用STL的 next_permutation
//备注:认为太简单太随意的可以去看下源代码
class Solution {
public:
void nextPermutation(vector<int>& nums) {
next_permutation(nums.begin(), nums.end());
}
};
//STL 中实现的源代码
template <class _BidirectionalIter>
bool prev_permutation(_BidirectionalIter __first, _BidirectionalIter __last) {
__STL_REQUIRES(_BidirectionalIter, _BidirectionalIterator);
__STL_REQUIRES(typename iterator_traits<_BidirectionalIter>::value_type,
_LessThanComparable);
//从此处往后看就行了
if (__first == __last)
return false;
_BidirectionalIter __i = __first;
++__i;
if (__i == __last)
return false;
__i = __last;
--__i;
for(;;) {
_BidirectionalIter __ii = __i;
--__i;
if (*__ii < *__i) { //找到了第一对ii<i的元素
_BidirectionalIter __j = __last;
while (!(*--__j < *__i)) //找j
{}
iter_swap(__i, __j); //交换i和j
reverse(__ii, __last); //逆转[ii,last)内的所有元素
return true;
}
if (__i == __first) { //搜索到了序列头仍然找不到这样的i,说明当前序列是全排列中的第一个排列
reverse(__first, __last); //将当前序列逆转,并返回false
return false;
}
}
}