AcWing 51. 数字排列
原题链接
中等
作者:
自由周某
,
2020-09-03 22:52:08
,
所有人可见
,
阅读 411
class Solution {
public:
/*参数len是需要走的路径长度了,container存储每个序列,u记录当前走到的长度*/
void dfs(vector<int>& nums, vector<vector<int>> &container, int path[], int u, bool* st, int len){
if(u == len){
vector<int> tmp;
for(int i = 0; i < len; i++) tmp.push_back(path[i]);
/*下面这步是判断container中是否有重复序列*/
bool found = false;
for(int i = 0; i < container.size(); i++)
if(container[i] == tmp) found = true;
if(!found) container.push_back(tmp);
return ;
}
for(int i = 0 ; i < nums.size(); i++) {
if(!st[i]){
st[i] = true;
path[u] = nums[i];
dfs(nums, container, path, u + 1, st, len);
st[i] = false;
}
}
}
vector<vector<int>> permutation(vector<int>& nums) {
int path[nums.size()]; //存储路径
vector<vector<int>> ans; //存储答案
bool st[nums.size()]; //用来记录nums中的下标为i的元素是否被访问过
int l = nums.size();
dfs(nums, ans, path, 0, st, l);
return ans;
}
};