44
----------------------------------------------------------------分割线------------------------------------------------------------------------------------
46、Permutations
题目:
题目意思是给定n个不同的数,打印出所有的排列。
http://blog.csdn.net/fly_yr/article/details/48139165
这一篇博客简单介绍了如何使用STL生成数组的全排列,代码如下:
1 class Solution { 2 public: 3 vector<vector<int>> permute(vector<int>& nums) { 4 vector<vector<int> > ret; 5 6 if (nums.empty()) 7 return ret; 8 9 sort(nums.begin(), nums.end()); 10 ret.push_back(nums); 11 while (next_permutation(nums.begin(), nums.end())) 12 ret.push_back(nums); 13 14 return ret; 15 } 16 };
为了提升自己的算法能力,当然不能只会使用STL,而是需要理解其怎样实现这个算法,并且动手自己写出来,这样对自己的能力才会有很大的提升。
---------------------------------------------------------------分割线----------------------------------------------------------------------
47、Permutations II
这一题和46题的区别就是数组中的数可能有相同的数。其实方法都和46题一样,代码如下:
1 class Solution { 2 public: 3 vector<vector<int>> permuteUnique(vector<int>& nums) { 4 vector<vector<int> > ret; 5 6 if (nums.empty()) 7 return ret; 8 9 sort(nums.begin(), nums.end()); 10 ret.push_back(nums); 11 while (next_permutation(nums.begin(), nums.end())) 12 ret.push_back(nums); 13 14 return ret; 15 } 16 };