47. Permutations II
来源:互联网 发布:淘宝电动车加热手套 编辑:程序博客网 时间:2024/06/05 01:53
类似46题,但是要对回溯进行减枝
46的前两种非递归法同样可以用在这里
第一种方法
class Solution {public: vector<vector<int> > permuteUnique(vector<int>& nums) { sort(nums.begin(),nums.end()); vector<vector<int> >result; result.push_back(nums); int i,j; while(1) { for(i=nums.size()-1;i>0;i--) { if(nums[i]>nums[i-1]) break; } if(i==0) break; for(j=nums.size()-1;j>=i;j--) { if(nums[j]>nums[i-1]) { swap(nums[j],nums[i-1]); break; } } reverse(nums.begin()+i,nums.end()); result.push_back(nums); } return result; }};
第二种方法:
class Solution {public: vector<vector<int> > permuteUnique(vector<int>& nums) { vector<vector<int> > ret; if (nums.empty()) return ret; sort(nums.begin(), nums.end()); ret.push_back(nums); while (next_permutation(nums.begin(), nums.end())) ret.push_back(nums); return ret; }};
两种回溯法
class Solution {public: vector<vector<int> > permuteUnique(vector<int>& nums) { vector<vector<int> > ret; vector<int> tmp; sort(nums.begin(),nums.end()); DFS(nums,tmp,ret,0); return ret; } void DFS(vector<int>& nums,vector<int>& temp,vector<vector<int> >&result,int count) { if(count==nums.size()) result.push_back(temp); int i,j; for(i=0;i<nums.size();i++) if(!i||nums[i]!=nums[i-1]) { int c1=0,c2=0; for(j=0;j<count;j++) if(nums[i]==temp[j]) c1++; for(j=0;j<nums.size();j++) if(nums[i]==nums[j]) c2++; if(c1<c2) { temp.push_back(nums[i]); DFS(nums,temp,result,count+1); temp.pop_back(); } } }};
class Solution {public: vector<vector<int> > permuteUnique(vector<int>& nums) { vector<vector<int> > ret; backtack(ret, nums, 0); return ret; } void backtack(vector<vector<int> > &ret, vector<int> &nums, int index) { if (index == nums.size()) { ret.push_back(nums); } else { for (int i = index; i < nums.size(); i ++) { sort(nums.begin()+index,nums.end()); if(i!=index&&nums[i]==nums[i-1]) continue; swap(nums[index], nums[i]); backtack(ret, nums, index + 1); swap(nums[index], nums[i]); } } }};
0 0
- 46. Permutations && 47. Permutations II
- 46. Permutations, 47. Permutations II
- [LeetCode]47.Permutations II
- LeetCode 47.Permutations II
- LeetCode --- 47. Permutations II
- [Leetcode] 47. Permutations II
- [leetcode] 47.Permutations II
- 47.Permutations II
- 47. Permutations II
- LeetCode 47. Permutations II
- 47. Permutations II
- 47. Permutations II LeetCode
- 47. Permutations II
- 47. Permutations II
- 47. Permutations II
- 47. Permutations II
- Leetcode 47. Permutations II
- 47. Permutations II
- 遍历二叉树(非递归)
- 监督式和非监督式机器学习算法
- python基础
- 做个JDBC访问MySQL的通用BaseDao
- [POJ 1625] Censored! (AC自动机+DP+高精度)
- 47. Permutations II
- CSDN-markdown编辑器语法总结
- http://www.cnblogs.com/exmyth/p/4555814.html
- XML基本语法
- 自组织网络(Ad hoc)
- python xlsxwriter创建excel图表
- poj 1088 滑雪(beta)
- uc/os II读书笔记(2)
- Leetcode-34. Search for a Range