题目:
Given a collection of distinct integers, return all possible permutations.
Example:
Input: [1,2,3] Output: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
描述:
给出一个数组,返回其全排列
分析:
最简单的思路是,升序排序后,调用next_permutation函数
也可以手动dfs全排列,简单的递归过程
最后竟然发现,直接调用stl的函数竟然比手动实现的快的多?!
代码一:(调用next_permutation函数)
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
sort(nums.begin(), nums.end());
vector<vector<int>> result;
do {
result.push_back(nums);
} while(next_permutation(nums.begin(), nums.end()));
return result;
}
};
代码二:(递归生成全排列)
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
sort(nums.begin(), nums.end());
vector<int> current;
vector<bool> visit(nums.size(), false);
vector<vector<int>> result;
permutation(nums, current, visit, result);
return result;
}
void permutation(const vector<int> & nums, vector<int> ¤t, vector<bool> &visit, vector<vector<int>> &result) {
if (current.size() == nums.size()) {
result.push_back(current);
return ;
}
for (int i = 0; i < nums.size(); ++ i) {
if (!visit[i]) {
current.push_back(nums[i]);
visit[i] = true;
permutation(nums, current, visit, result);
current.pop_back();
visit[i] = false;
}
}
}
};