Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 55d353a

Browse files
committed
46 47
1 parent 58ab36b commit 55d353a

File tree

2 files changed

+122
-0
lines changed

2 files changed

+122
-0
lines changed

‎cppForLeetcode/46_permutatinos.cpp‎

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#include <iostream>
2+
#include <set>
3+
#include <unordered_map>
4+
#include <vector>
5+
#include <queue>
6+
using namespace std;
7+
8+
class Solution {
9+
public:
10+
void entry(vector<int> &nums, vector<vector<int>> &results, int track[], vector<int> &one_perm)
11+
{
12+
if (one_perm.size() == nums.size())
13+
{
14+
results.push_back(one_perm);
15+
return;
16+
}
17+
18+
for(int i = 0; i < nums.size(); ++i)
19+
{
20+
if (!track[i])
21+
{
22+
one_perm.push_back(nums[i]);
23+
track[i] = 1;
24+
entry(nums, results, track, one_perm);
25+
track[i] = 0;
26+
one_perm.pop_back();
27+
}
28+
}
29+
}
30+
vector<vector<int>> permute(vector<int>& nums) {
31+
int track[nums.size()];
32+
for(int i = 0; i < nums.size(); ++i) track[i] = 0;
33+
vector<vector<int>> results;
34+
vector<int> one_perm;
35+
entry(nums, results, track, one_perm);
36+
return results;
37+
}
38+
};
39+
40+
int main(void)
41+
{
42+
Solution sol = Solution();
43+
vector<int> in = {1, 2, 3, 4, 5, 6};
44+
vector<vector<int>> out = sol.permute(in);
45+
for(auto& l : out)
46+
{
47+
for (int i : l)
48+
{
49+
cout << i << " ";
50+
}
51+
cout << endl;
52+
}
53+
cout << out.size() << endl;
54+
55+
return 0;
56+
}

‎cppForLeetcode/47_PermutationsII.cpp‎

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#include <iostream>
2+
#include <set>
3+
#include <unordered_map>
4+
#include <map>
5+
#include <vector>
6+
#include <sstream>
7+
#include <queue>
8+
#include <algorithm>
9+
using namespace std;
10+
11+
class Solution {
12+
public:
13+
void entry(vector<int> &nums, vector<vector<int>> &results, int track[], vector<int> &one_perm)
14+
{
15+
if (one_perm.size() == nums.size())
16+
{
17+
results.push_back(one_perm);
18+
return;
19+
}
20+
21+
for(int i = 0; i < nums.size(); ++i)
22+
{
23+
if (!track[i])
24+
{
25+
// duplicates in current iteration need to be skipped.
26+
// !track[i - 1] == true: the last one has already been processed, so the current one need to be skipped.
27+
// track[i - 1] == true: nums[i] is used in the previous iterations and that should not effect this iteration.
28+
if (i > 0 && nums[i] == nums[i-1] && !track[i - 1])
29+
continue;
30+
one_perm.push_back(nums[i]);
31+
track[i] = 1;
32+
entry(nums, results, track, one_perm);
33+
track[i] = 0;
34+
one_perm.pop_back();
35+
}
36+
}
37+
}
38+
vector<vector<int>> permuteUnique(vector<int>& nums) {
39+
int track[nums.size()];
40+
sort(nums.begin(), nums.end());
41+
for(int i = 0; i < nums.size(); ++i) track[i] = 0;
42+
vector<vector<int>> results;
43+
vector<int> one_perm;
44+
entry(nums, results, track, one_perm);
45+
46+
return results;
47+
}
48+
};
49+
50+
int main(void)
51+
{
52+
Solution sol = Solution();
53+
vector<int> in = {1, 2, 2, 3};
54+
vector<vector<int>> out = sol.permuteUnique(in);
55+
for(auto& l : out)
56+
{
57+
for (int i : l)
58+
{
59+
cout << i << " ";
60+
}
61+
cout << endl;
62+
}
63+
cout << out.size() << endl;
64+
65+
return 0;
66+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /