好吧,我承认,这道题我做的也太偷懒了。就因为我熟悉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;
}
};