next_permutation和prev_permutation是對c++求全排列的函數,分別可以求出下一個全排列和前一個全排列。
這裏以next_permutation爲例,來看一下c++官網的定義:
default: bool next_permutation (BidirectionalIterator first,
BidirectionalIterator last);
custom: bool next_permutation (BidirectionalIterator first, BidirectionalIterator last, Compare comp);
可以看到和sort的用法很像,只需要輸入first和last就可以返回是否有下一個,如果有的話會直接在內部排序出現下一個。
同時可以選項是comp函數,可以自定義排序方式,默認爲字典序。
例子
這是一道全排列的題目,普通解法有dfs和非遞歸的查找,看解答時發現了這個函數,減少了不少代碼量。
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> ans;
if (nums.size() == 0) return ans;
sort(nums.begin(), nums.end());
ans.push_back(nums);
while (next_permutation(nums.begin(), nums.end())) {
ans.push_back(nums);
}
return ans;
}
};