标签:
Well, have you solved the nextPermutation problem? If so, your code can be used in this problem. The idea is fairly simple:
nums
in ascending order, add it to res
;nums
using nextPermutation()
, and add it to res
;nums
returns to the sorted condition in 1.The code is as follows.
A final note, the following code can be applied to the problem of Permutations II without any modification since the cases of duplicates have already been handled in nextPermutation()
. If you want to learn more about nextPermutation()
, please visit this solution.
1 bool nextPermutation(vector<int>& nums) { 2 int k = -1; 3 for (int i = nums.size() - 2; i >= 0; i--) { 4 if (nums[i] < nums[i + 1]) { 5 k = i; 6 break; 7 } 8 } 9 if (k == -1) { 10 sort(nums.begin(), nums.end()); 11 return false; 12 } 13 int l = -1; 14 for (int i = nums.size() - 1; i > k; i--) { 15 if (nums[i] > nums[k]) { 16 l = i; 17 break; 18 } 19 } 20 swap(nums[k], nums[l]); 21 reverse(nums.begin() + k + 1, nums.end()); 22 return true; 23 } 24 vector<vector<int>> permute(vector<int>& nums) { 25 vector<vector<int> > res; 26 sort(nums.begin(), nums.end()); 27 res.push_back(nums); 28 while (nextPermutation(nums)) 29 res.push_back(nums); 30 return res; 31 }
标签:
原文地址:http://www.cnblogs.com/jcliBlogger/p/4547987.html