题目链接:46.全排列

题解:

全排列问题,经典DFS!

题目简述:

给定没有重复元素的序列,输出全排列!

题解:

直接搜索加回溯就行了:

参数:

  • cnt:表示当前搜到第几位数
  • nums:传入原数组
  • 递归出口:cnt == nums.size()
  • 搜索过的直接跳过即可,使用vis数组标记即可!

AC代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
vector<vector<int>> res;
vector<int> path;
vector<bool> vis;
vector<vector<int>> permute(vector<int>& nums) {
vis = vector<bool>(nums.size());
dfs(0, nums);
return res;
}
void dfs(int cnt, vector<int>& nums){
if(cnt == nums.size()){
res.push_back(path);
return;
}
for(int i = 0; i < nums.size(); i++){
if(vis[i]) continue;
path.push_back(nums[i]); vis[i] = true;
dfs(cnt + 1, nums);
path.pop_back(); vis[i] = false;
}
}
};