Skip to content

Commit 2854e9c

Browse files
committed
排列组合比较经典的
1 parent bac304e commit 2854e9c

File tree

2 files changed

+108
-33
lines changed

2 files changed

+108
-33
lines changed

DFS/Permutaion

Lines changed: 0 additions & 33 deletions
This file was deleted.

DFS/Permutaion I & II

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
class Solution {
2+
private:
3+
vector<vector<int>> results;
4+
void dfs(vector<int> source,vector<int> result)
5+
{
6+
if(result.size() == source.size()) // 评判条件, 就被start end 什么的洗脑了。。
7+
results.push_back(result);
8+
else
9+
{
10+
for(int i = 0;i < source.size();i++) // 从0开始,要去遍历所有的元素
11+
{
12+
auto pos = find(result.begin(),result.end(),source[i]);
13+
if(pos == result.end()) // 确保当前元素没有出现过
14+
{
15+
result.push_back(source[i]);
16+
dfs(source,result);
17+
result.pop_back();
18+
}
19+
20+
}
21+
}
22+
}
23+
24+
25+
public:
26+
vector<vector<int> > permute(vector<int> &num) {
27+
vector<int> result;
28+
if(num.size() >=1)
29+
dfs(num,result);
30+
return results;
31+
32+
}
33+
};
34+
35+
// 用了一个index 数组存放下标值,看是否重用过,看其他的方法,用的是 标志数组,应该比我这个更简单了一些
36+
37+
class Solution {
38+
private:
39+
void dfs(vector<int> &source,vector<int> &result, vector<vector<int>> &results,vector<int> &indexs)
40+
{
41+
if(result.size() == source.size())
42+
43+
results.push_back(result);
44+
for(int i = 0;i < source.size();i++)
45+
{
46+
if(i > 0 && source[i] == source[i-1] && find(indexs.begin(),indexs.end(),i-1) == indexs.end()) // 注意这个
47+
continue;
48+
if(find(indexs.begin(),indexs.end(),i) == indexs.end())
49+
{
50+
result.push_back(source[i]);
51+
indexs.push_back(i);
52+
dfs(source,result,results,indexs);
53+
result.pop_back();
54+
indexs.pop_back();
55+
}
56+
}
57+
}
58+
59+
public:
60+
vector<vector<int> > permuteUnique(vector<int> &num) {
61+
vector<vector<int>> results;
62+
vector<int> result,indexs;
63+
if(num.size() > 0 )
64+
{
65+
sort(num.begin(),num.end());
66+
dfs(num,result,results,indexs);
67+
}
68+
69+
return results;
70+
71+
};
72+
用的是一个vector<bool> indexs 来吧表示对应的数是否用过了!
73+
74+
class Solution {
75+
private:
76+
void dfs(vector<int> &source,vector<int> &result, vector<vector<int>> &results,vector<bool>&indexs)
77+
{
78+
if(result.size() == source.size())
79+
results.push_back(result);
80+
for(int i = 0;i < source.size();i++)
81+
{
82+
if(i > 0 && source[i] == source[i-1] && !indexs[i-1])
83+
continue;
84+
if(!indexs[i])
85+
{
86+
result.push_back(source[i]);
87+
indexs[i]= true;
88+
dfs(source,result,results,indexs);
89+
result.pop_back();
90+
indexs[i]=false;
91+
}
92+
}
93+
}
94+
95+
public:
96+
vector<vector<int> > permuteUnique(vector<int> &num) {
97+
vector<vector<int>> results;
98+
vector<int> result;
99+
vector<bool> indexs(num.size(),false);
100+
if(num.size() > 0 )
101+
{
102+
sort(num.begin(),num.end());
103+
dfs(num,result,results,indexs);
104+
}
105+
return results;
106+
107+
}
108+
};

0 commit comments

Comments
 (0)