问题描述:
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]
]
题源:here;完整实现:here
思路:
两种方案:1 递归;2 位置交换。
方案1
void recurse(vector<int> nums, vector<int> permutation, vector<vector<int>>& permutations){
if (nums.size() == 0) {
permutations.push_back(permutation);
return;
}
else{
for (int i = 0; i < nums.size(); i++){
vector<int> tNums = nums;
permutation.push_back(tNums[i]);
tNums.erase(tNums.begin()+i);
recurse(tNums, permutation, permutations);
permutation.pop_back();
}
}
}
vector<vector<int>> permute_1(vector<int>& nums) {
vector<vector<int>> permutations;
recurse(nums, {}, permutations);
return permutations;
}
方案2
vector<vector<int>> permute_2(vector<int>& nums){
vector<vector<int>> permutations;
//if (nums.size() < 2) return { nums };
permutations.push_back(nums);
int position = 0;
for (int i = 0; i < nums.size() - 1; i++){
int pSize = permutations.size();
for (int j = 0; j < pSize; j++){
for (int k = position + 1; k < nums.size(); k++){
vector<int> tempP = permutations[j];
int t = tempP[position]; tempP[position] = tempP[k]; tempP[k] = t;
permutations.push_back(tempP);
}
}
position++;
}
return permutations;
}