46. 全排列
class Solution {
public:
// dfs
vector<vector<int>> res;
vector<int> path; // 只能是全局变量
bool flag[100];
int n=0;
void dfs(int u,vector<int>& nums){
if(u==n){ // 已经递归到底部
res.push_back(path);
}
for(int i=0;i<n;i++){
if(!flag[i]){
path.push_back(nums[i]);
flag[i]=true;
dfs(u+1,nums);
path.pop_back();
flag[i]=false;
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
n=nums.size();
dfs(0,nums); //从第0层开始递归
return res;
}
};
递归树思路:
第一个空格,有三个数字选填,故有三个分支。
第二个空格,有两个数字可以填,故有两个分支。
第三个空格,只有一个数字可以选填,故只有一个分支。