https://oj.leetcode.com/problems/permutations/

写出一列数的全排列

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
class Solution{
public:
    vector<vector<int> > permute(vector<int> &num) {
       vector<vector<int> > ans;
       if(num.size()==0)
           return ans;

       vector<int> _num = num;
       sort(_num.begin(),_num.end());

       ans.push_back(_num);
       while(nextPermutation(_num))
       {
           ans.push_back(_num);
       }
       return ans;
    }
private:
    bool nextPermutation(vector<int> &num)
    {
        return next_permutation(num.begin(),num.end());
    }

    template<typename BidiIt>
    bool next_permutation(BidiIt first,BidiIt last)
    {
        const auto rfirst = reverse_iterator<BidiIt>(last);
        const auto rlast = reverse_iterator<BidiIt>(first);

        auto pivot = next(rfirst);
        while(pivot != rlast && *pivot >= *prev(pivot))
        {
            ++pivot;
        }
        
        //this is the last permute, or the next is the same as the begin one
        if(pivot == rlast)
        {
            reverse(rfirst,rlast);
            return false;
        }
        //find the first num great than pivot
        auto change = rfirst;
        while(*change<=*pivot)
            ++change;

        swap(*change,*pivot);
        reverse(rfirst,pivot);
        return true;
    }
};

int main()
{
    vector<int> num;
    num.push_back(9);
    num.push_back(8);
    num.push_back(5);
     
    Solution myS;
    myS.permute(num);
    return 0;
}

 

相关文章:

  • 2021-06-02
  • 2021-06-12
  • 2021-10-19
  • 2022-12-23
猜你喜欢
  • 2021-09-19
  • 2021-07-17
  • 2021-08-17
  • 2021-11-23
  • 2021-08-30
  • 2021-07-11
相关资源
相似解决方案