File tree Expand file tree Collapse file tree 4 files changed +138
-0
lines changed Expand file tree Collapse file tree 4 files changed +138
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ void nextPermutation (vector<int > &num) {
4
+
5
+ int k = find_break (num);
6
+
7
+ if (k == -1 ){
8
+ sort (num.begin (), num.end ());
9
+ }else {
10
+ sort (num.begin ()+k+1 , num.end ());
11
+
12
+ for (int i = k+1 ; i < num.size (); i++){
13
+ if (num[i] > num[k]){
14
+ swap (num[k], num[i]);
15
+ break ;
16
+ }
17
+ }
18
+ }
19
+ }
20
+
21
+ private:
22
+ int find_break (vector<int > &A){
23
+ if (A.size () < 2 ) return -1 ;
24
+
25
+ for (int i = A.size ()-1 ; i>0 ; i--){
26
+ if (A[i] > A[i-1 ]) return i-1 ;
27
+ }
28
+
29
+ return -1 ;
30
+ }
31
+ };
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ string getPermutation (int n, int k) {
4
+ vector<int > elems;
5
+ for (int i = 1 ; i <= n; i++){
6
+ elems.push_back (i);
7
+ }
8
+
9
+ return perm_helper (elems, k);
10
+ }
11
+ private:
12
+ int fac (int i){
13
+ if (i == 1 ) return 1 ;
14
+ int result = 1 ;
15
+ while (i > 1 ){
16
+ result *= i;
17
+ i--;
18
+ }
19
+ return result;
20
+ }
21
+
22
+ string perm_helper (vector<int > &A, int k){
23
+ string result;
24
+
25
+ if (k == 1 ){
26
+ for (int i = 0 ; i < A.size (); i++){
27
+ result += (char )(A[i] + ' 0' );
28
+ }
29
+ return result;
30
+ }
31
+
32
+ int range = fac (A.size ()-1 );
33
+ int ind = (k-1 )/range;
34
+
35
+ int new_rank = k%range;
36
+ if (new_rank == 0 ) new_rank += range;
37
+
38
+ result += (char )(A[ind]+' 0' );
39
+ A.erase (A.begin ()+ind);
40
+
41
+ result += perm_helper (A, new_rank);
42
+ return result;
43
+ }
44
+ };
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ vector<vector<int > > permute (vector<int > &num) {
4
+ if (num.empty ()) return vector<vector<int >>();
5
+ vector<vector<int >> result;
6
+
7
+ vector<int > sofar;
8
+ vector<int > rest;
9
+ permute_helper (result, sofar, num);
10
+
11
+ return result;
12
+ }
13
+
14
+ private:
15
+ void permute_helper (vector<vector<int >> &result, vector<int > &sofar, vector<int > &rest){
16
+ if (rest.empty ()){
17
+ result.push_back (sofar);
18
+ return ;
19
+ }
20
+
21
+ for (int i = 0 ; i < rest.size (); i++){
22
+ int t = rest[i];
23
+ sofar.push_back (t);
24
+ auto it = rest.erase (rest.begin ()+i);
25
+ permute_helper (result, sofar, rest);
26
+ sofar.pop_back ();
27
+ rest.insert (it, t);
28
+ }
29
+ }
30
+ };
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ vector<vector<int > > permuteUnique (vector<int > &num) {
4
+ if (num.empty ()) return vector<vector<int >>();
5
+ sort (num.begin (), num.end ());
6
+
7
+ vector<vector<int >> result;
8
+ vector<int > sofar;
9
+ permute_helper (result, sofar, num);
10
+
11
+ return result;
12
+ }
13
+ private:
14
+ void permute_helper (vector<vector<int >> &result, vector<int > &sofar, vector<int > &rest){
15
+ if (rest.empty ()){
16
+ result.push_back (sofar);
17
+ return ;
18
+ }
19
+
20
+ for (int i = 0 ; i < rest.size (); i++){
21
+ if (i > 0 && rest[i] == rest[i-1 ]) continue ;
22
+ int t = rest[i];
23
+
24
+ sofar.push_back (t);
25
+ auto it = rest.erase (rest.begin ()+i);
26
+
27
+ permute_helper (result, sofar, rest);
28
+
29
+ sofar.pop_back ();
30
+ rest.insert (it, t);
31
+ }
32
+ }
33
+ };
You can’t perform that action at this time.
0 commit comments