[leetcode刷题系列]Permutations

很基本的题目把, 不过貌似限制了不许用stl现有的next_permutation, 反正用的时候显示编译错误了,不知道是不是我写错了。

于是就直接自己写了个next_permutation的实现。 由于最近一直有在看英文版的组合数学,而且最近恰巧也练习过如何按照字典序得出所有的序列。

所以这题写的比较顺利, 编译通过后就过了。

class Solution {
    bool next_permutation(int* begin, int* end){
        if(begin + 1 >= end)
            return false;
        int* p = end - 1;
        while(p - 1 >= begin)
            if(*(p - 1) < *p)
                break;
            else
                -- p;
        if(p - 1 < begin){
            reverse(begin, end);
            return false;
        }
        int * target = p - 1;
        p = end - 1;
        while(p > target)
            if(*p > *target)
                break;
            else
                -- p;
        swap(*target, *p);
        reverse(target + 1, end);
        return true;
        
    }
public:
    vector<vector<int> > permute(vector<int> &num) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        int n = num.size();
        int a[num.size()];
        for(int i = 0; i < n; ++ i)
            a[i] = num[i];
        sort(a, a + n);
        vector<vector<int> > ret;
        do{
            vector<int> v(a, a + n);
            ret.push_back(v);
        }while(next_permutation(a, a + n));
        return ret;
    }
};


你可能感兴趣的:([leetcode刷题系列]Permutations)