好吧,我承认,这道题我做的也太偷懒了。就因为我熟悉STL,知道有这么个排列组合算法函数,就直接使用了。

效率应该还是要稍微弱点,因为我先进行了一次排列,然后才开始迭代每一种组合的。

我猜测正确的做法比较麻烦,需要涉及DP,不断的swap元素,创造各种不同的组合。

以后有空再试,这都属于重复造轮子了。

#include <algorithm>
#include <vector>

using std::vector; using std::next_permutation;

class Solution {
public:
    vector<vector<int> > permute(vector<int> &num) {
        vector<vector<int> > ret;
        sort(num.begin(), num.end());
        do {
            ret.push_back(num);
        } while (next_permutation(num.begin(), num.end()));
        return ret;
    }
};

LeetCode Direct Link