Leetcode题解(十六)

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 };
原文地址:https://www.cnblogs.com/LCCRNblog/p/5148639.html