数组《没有重复元素集合的全排列》
自解(耗时10min)
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
int l=size(nums);
int n=num(l);
int i=0;
sort(nums.begin(),nums.end());
vector<vector<int>> a(n);
do{
a[i]=nums;
i++;
}while(next_permutation(nums.begin(),nums.end()));
return a;
}
int num(int n){
if(n==1)
return 1;
return n*num(n-1);
}
};
官方题解(回溯法)
class Solution {
public:
void backtrack(vector<vector<int>>& res, vector<int>& output, int first, int len){
// 所有数都填完了
if (first == len) {
res.emplace_back(output);
return;
}
for (int i = first; i < len; ++i) {
// 动态维护数组
swap(output[i], output[first]);
// 继续递归填下一个数
backtrack(res, output, first + 1, len);
// 撤销操作
swap(output[i], output[first]);
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int> > res;
backtrack(res, nums, 0, (int)nums.size());
return res;
}
};
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/permutations/solution/quan-pai-lie-by-leetcode-solution-2/