Recursive implementations:
classSolution { Public: /** * @param nums:a list of integers. * @return: A list of permutations. */Vector<vector<int> > Permute (vector<int>nums) { //Write your code herevector<vector<int> >permutations; if(Nums.empty ())returnpermutations; Permutate (Nums,0, permutations); returnpermutations; }Private: voidPermutate (vector<int> Nums,intStart, vector<vector<int> >&permutations) { if(Start = =nums.size ()) {Permutations.push_back (nums); return; } for(inti = start; I < (int) Nums.size (); i++) {swap (Nums[start], nums[i]); Permutate (nums, start+1, permutations); } }};
Non-recursive implementations (based on nextpermutation):
1 classSolution {2 Public:3 /**4 * @param nums:a List of integers.5 * @return: A list of permutations.6 */7vector<vector<int> > Permute (vector<int>nums) {8 //Write your code here9vector<vector<int> >permutations;Ten if(Nums.empty ())returnpermutations; Onevector<int>copy (Nums.begin (), Nums.end ()); A nextpermutation (nums); - Permutations.push_back (nums); - while(Nums! =copy) { the nextpermutation (nums); - Permutations.push_back (nums); - } - returnpermutations; + } - Private: + voidNextpermutation (vector<int>&nums) { A intK =-1, n =nums.size (); at for(inti = n-2; I >=0; i--) { - if(Nums[i] < Nums[i +1]) { -K =i; - Break; - } - } in if(k = =-1) { - Reverse (Nums.begin (), Nums.end ()); to return; + } - intl; the for(inti = n-1; i > k; i--) { * if(Nums[i] >Nums[k]) { $L =i;Panax Notoginseng Break; - } the } + swap (Nums[l], nums[k]); AReverse (Nums.begin () + K +1, Nums.end ()); the } +};
[Lintcode] Full arrangement