Question 46– Permutations
给定几个没有重复的整数,求出它们的所有排列。
算法
前n个元素的全排列等于在前n-1的的每一个排列中加入第n个元素后形成的所有排列。
code
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> permutes;
if(nums.size()==0) return permutes;
vector<int> a;
a.push_back(nums[0]);
permutes.push_back(a);
for(int i=1; i<nums.size(); i++){
int n=permutes.size();
for(int j=0; j<n; j++){
int size=permutes[0].size();
for(int iter=0; iter<=size; iter++){
(a=permutes[0]).insert(a.begin()+iter,nums[i]);
permutes.push_back(a);
}
permutes.erase(permutes.begin());
}
}
return permutes;
}
一种递归的算法
void permuterecursion(vector<vector<int>>&permutes, vector<int>&temp, vector<int>&nums){
if(temp.size()==nums.size()){
permutes.push_back(temp);
return;
}
for(int i=0; i<nums.size(); i++){
if(find(temp.begin(),temp.end(),nums[i])!=temp.end()) continue;
temp.push_back(nums[i]);
permuterecursion(permutes,temp,nums);
temp.erase(temp.end()-1);
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> permutes;
vector<int> temp;
permuterecursion(permutes,temp,nums);
return permutes;
}