STL——next_permutation&prev_permutation

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函數,可以自定義排序方式,默認爲字典序。

例子

題目:leetcode 46. Permutations

這是一道全排列的題目,普通解法有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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章