带重复元素的排列

给出一个具有重复数字的列表,找出列表所有不同的排列。

样例

给出列表 [1,2,2],不同的排列有:

[

[1,2,2],

[2,1,2],

[2,2,1]

]

挑战

使用递归和非递归分别完成该题。

标签

领英 递归 深度优先搜索

code

class Solution {
public:
/**
* @param nums: A list of integers.
* @return: A list of permutations.
*/
vector<vector<int> > permute(vector<int> nums) {
// write your code here
vector<vector<int> > result;
int size = nums.size();
if(size == 0) {
result.push_back(nums);
return result;
} permute(nums, 0, size, result); return result;
} void permute(vector<int> &nums, int begin, int end, vector<vector<int> > &result) {
if(begin == end) {
if(!isExist(nums, result)) {
result.push_back(nums);
}
}
else {
for(int i=begin; i<end; i++) {
int temp = nums[i];
nums[i] = nums[begin];
nums[begin] = temp; permute(nums, begin+1, end, result); temp = nums[i];
nums[i] = nums[begin];
nums[begin] = temp;
}
}
} bool isExist(vector<int> &nums, vector<vector<int> > &result) {
int size = result.size();
if(size == 0)
return false;
for(int i=0; i<size; i++) {
if(isSameNums(nums, result[i])) {
return true;
}
}
return false;
} bool isSameNums(vector<int> &nums1, vector<int> &nums2) {
int size = nums1.size();
for(int i=0; i<size; i++) {
if(nums1[i] != nums2[i]) {
return false;
}
}
return true;
}
};

最新文章

  1. 创建多个Oracle数据库及相应的实例
  2. 微信token验证失败的解决方法
  3. [bzoj4424]Fairy
  4. 2,SFDC 管理员篇 - 组织架构
  5. iOS 并发编程指南
  6. swun 1184
  7. Aggressive cows 二分不仅仅是查找
  8. 关于NRW算法(Quorum算法)
  9. Bzoj 3343: 教主的魔法 分块,二分
  10. UNIX基础知识
  11. Activity之间的跳转
  12. 触碰jQuery:AJAX异步详解(转)
  13. Android牛博
  14. open和fopen的区别:
  15. MySQL ProxySQL读写分离实践
  16. arm-none-eabi-gcc编译报错:exit.c:(.text.exit+0x16): undefined reference to `_exit&#39;
  17. reStructuredText的学习
  18. 用python 实现一个栈
  19. 2017-12-21 FriceEngine试用与API中文化
  20. Android ViewPager + Fragment实现滑动页面

热门文章

  1. ASP.NET MVC4.0 后台获取不大前台传来的file
  2. go加密算法:非对称加密(一)--RSA
  3. try catch finally 中 returne的执行顺序
  4. C# IL DASM 使用-破解c#软件方法
  5. Spark Streaming job的生成及数据清理总结
  6. Linux的基础命令大全
  7. python--模块之sys与python解释器交互模块
  8. ruby 反射机制常用方法
  9. 网络文件系统nfs在ubuntu16.04的安装
  10. linux 查看内置命令