1 class Solution {
2 public:
3 vector<vector<int>> permute(vector<int>& nums) {
4 if(nums.empty()) return {};
5 // 存放最后结果
6 vector<vector<int>> ans;
7 // 存放某一个排列
8 vector<int> temp;
9 // 判断该数字是否被使用过
10 vector<bool> used(nums.size(),false);
11 // 进行递归求解
12 dfs(ans,temp,used,nums);
13
14 return ans;
15 }
16
17 void dfs(vector<vector<int>>& ans,vector<int>& temp,vector<bool>& used,
18 const vector<int>& nums)
19 {
20 // 如果当前排列数组的长度等于输入数组的长度
21 // 该排列已完成
22 // 将该排列的加入结果中,返回
23 if(temp.size()==nums.size())
24 {
25 ans.push_back(temp);
26 return;
27 }
28
29 // 循环的进行枚举所有状态
30 for(int i=0;i<nums.size();++i)
31 {
32 // 该数字已经选择过,跳过
33 if(used.at(i)) continue;
34
35 // 选择当前数字
36 temp.push_back(nums.at(i));
37 // 记录该数字已被选择
38 used.at(i)=true;
39 // 递归选择下一个数字
40 dfs(ans,temp,used,nums);
41 // 回溯,撤销当前选择
42 used.at(i)=false;
43 temp.pop_back();
44 }
45 }
46 };