STL中提供了两个计算排列组合的算法,分别是next_permutation和prev_permutation。这两者有何区别,我们来了解一下next和prev的区别。考虑三个数字所组成的序列123.
这个序列有六种可能的排列组合:123,132,213,231,312,321。这些排列组合根据less-than操作符做字典顺序的排列。也就是说,123排第一,因为每一个元素都小于其后的元素。而132是下一个排列组合,因为他是固定了1之后所做的新的组合。同理,固定了2之后的序列213和231,213在前而231在后,是因为13的次序小于31。面对231,我们就可以说其前一个排列组合是213,后一个排列组合是312。
实例:LeetCode第46题. Permutations,就可以用这个方法调用来解决:
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums)
{
vector<vector<int>> ourResult;
vector<int> singleIter = nums;
ourResult.push_back(singleIter);
next_permutation(singleIter.begin(), singleIter.end());
while (singleIter != nums)
{
ourResult.push_back(singleIter);
next_permutation(singleIter.begin(), singleIter.end());
}
return ourResult;
}
};