码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode-Permutations II-47

时间:2016-08-30 16:00:58      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

输入一个数组,字典序输出所有排列,输入的数组中元素可能有重复。

详细思路看上一篇博文,这里重点说一下去重:

上一篇的去重不完善,思路是完善的,代码不完善,加了一个判断才对,具体看代码注释

 1 class Solution {
 2 public:
 3     void func(vector<vector<int> > &v,vector<int> a,int low,int high){
 4         if(low==high-1){
 5             v.push_back(a);
 6             return;
 7         }
 8         for(int i=low;i<high;i++){
 9             if(i!=low&&a[i]==a[low]||(i>0&&i!=low&&a[i]==a[i-1])) continue;  //这里的||后面的判断才是真正判断同一层中一个相同值的元素只递归一次
10             swap(a[i],a[low]);
11             sort(a.begin()+low+1,a.end());
12             func(v,a,low+1,high);
13             swap(a[i],a[low]);
14         }
15     }
16     vector<vector<int>> permuteUnique(vector<int>& nums) {
17         vector<vector<int> > v;
18         sort(nums.begin(),nums.end());
19         func(v,nums,0,nums.size());
20         return v;
21     }
22 };

 

leetcode-Permutations II-47

标签:

原文地址:http://www.cnblogs.com/0summer/p/5822331.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!