题目要求: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].

分析:

参考网址:http://www.cnblogs.com/panda_lin/archive/2013/11/12/permutations.html

可以使用STL的next_permutation函数。

不使用的话,要递归生成全排列。

① 生成[2, 3]的全排列[2, 3]和[3, 2],然后把1加上去生成[1, 2, 3]和[1, 3, 2]。

② 交换1和2的位置,生成[1, 3]的全排列[1, 3]和[3, 1],然后把2加上去生成[2, 1, 3]和[2, 3, 1]。

③在第二步的基础上交换2和3的位置,生成[2, 1]的全排列[2, 1]和[1, 2],然后把3加上去生成[3, 2, 1]和[3, 1, 2]。

① [1, 2, 3]  [1, 3, 2]

② [2, 1, 3]  [2, 3, 1]

③ [3, 2, 1]  [3, 1, 2]

代码如下:

class Solution {
public:
vector<vector<int> > permute(vector<int> &num) { vector<vector<int>> result;
sort(num.begin(), num.end()); //STL next_permutation
do{
result.push_back(num);
}while(next_permutation(num.begin(), num.end())); return result; }
};
class Solution {
public:
void internalPermute(vector<int> &num, int index, vector<int> &perm, vector<vector<int> > &result) {
int size = num.size(); if (size == index) {
result.push_back(perm);
}
else {
for (int i = index; i < size; ++i) {
swap(num[index], num[i]);
perm.push_back(num[index]);
internalPermute(num, index + 1, perm, result);
perm.pop_back();
swap(num[index], num[i]);
}
}
} vector<vector<int> > permute(vector<int> &num) {
vector<vector<int> > result;
vector<int> perm; internalPermute(num, 0, perm, result); return result;
}
};

最新文章

  1. H5基于iScroll实现下拉刷新,上拉加载更多
  2. UITabBarController 更改tabbariteam上的选中图片
  3. Java 中的值传递和参数传递
  4. 撤销git reset soft head操作
  5. linux安装pip报错
  6. NPN&amp;PNP
  7. 转载 deep learning:八(SparseCoding稀疏编码)
  8. ZOJ 3927 Programming Ability Test
  9. git团队合作开发流程
  10. Python字符处理
  11. hihocoder——1041国庆出游(搜索)
  12. linux 文件传输 SCP
  13. Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图(转载)
  14. 使用nginx作为webservice接口代理
  15. Hue中hive(hive cli)查询结果中显示列名,不带表名
  16. web.xml关于spring的讲解
  17. DAY6-Flask项目
  18. bzoj 2752
  19. C语言—第二次作业
  20. 881. Boats to Save People

热门文章

  1. 购买GPRS DTU时应该怎么选择
  2. Java学习的第三十七天
  3. Java学习的第十四天
  4. python使用redis缓存数据库
  5. [Luogu P3723] [AH2017/HNOI2017]礼物 (FFT 卷积)
  6. P2937 [USACO09JAN]Laserphones S
  7. 使用rabbitmq实现集群im聊天服务器消息的路由
  8. Dorado download注意事项
  9. 1. 线性DP 152. 乘积最大子数组
  10. 查询OSD运行在哪些cpu上