[Leetcode] Permutations

Given a collection of numbers, return all possible permutations.

For example,
[1,2,3] have the following permutations:
[1,2,3][1,3,2][2,1,3][2,3,1][3,1,2], and [3,2,1].

 

与Next Permutation一样,n个元素的排列共有n!个,所以只要执行n!次next_permutation就行。

 

 1 class Solution {

 2 public:

 3     bool nextPermutation(vector<int> &num) {

 4         if (num.size() < 2) {

 5             return false;

 6         }

 7         int i, k;

 8         bool flag = true;

 9         for (i = num.size() - 2; i >= 0; --i) {

10             if (num[i] < num[i + 1]) {

11                 break;

12             }

13         }

14         if (i < 0) {

15             flag = false;

16         }

17         for (k = num.size() - 1; k > i; --k) {

18             if (num[k] > num[i]) {

19                 break;

20             }

21         }

22         swap(num[i], num[k]);

23         reverse(num.begin() + i + 1, num.end());

24         return flag;

25     }

26     

27     long long getNum(int n) {

28         long long res = 1;

29         while (n > 0) {

30             res *= n;

31             n--;

32         }

33         return res;

34     }

35     

36     vector<vector<int> > permute(vector<int> &num) {

37         vector<vector<int> > res;

38         res.push_back(num);

39         long long n = getNum(num.size());

40         while (--n) {

41             nextPermutation(num);

42             res.push_back(num);

43         }

44         return res;

45     }

46 };

 

你可能感兴趣的:(LeetCode)