46. Permutations

每日一题 2019 - 03 - 28

题目:

Given a collection of distinct integers, return all possible permutations.

Example:

1
2
3
4
5
6
7
8
9
10
Input: [1,2,3]
Output:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]

解法:

这个题让我们手动实现一个全排列算法,至于全排列算法,思路也基本就是回溯法,不过实现全排列的回溯需要交换当前数组的位置,同时还需要注意在回溯到上一层的位置时候,需要将交换过的数据的位置还原回来。


代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public:
void test_permute(vector<int>&nums, vector<vector<int>>& ans, int begin, int end){
if(begin == end){//完成一次完整的排列,就把此时的nums压入到ans中
ans.push_back(nums);
return;
}else{
for(int i = begin; i <= end; i++){
//这里的某一位置需要跟自己交换比如初始的序列 [1,2,3]
swap(nums[begin],nums[i]);
test_permute(nums,ans,begin+1,end);
swap(nums[begin],nums[i]);
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> ans;
int len = nums.size()-1;
test_permute(nums, ans, 0, len);
return ans;
}
};
0%
undefined