leetcode-Permutations II-47

Posted 0_summer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode-Permutations II-47相关的知识,希望对你有一定的参考价值。

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

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

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

 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的主要内容,如果未能解决你的问题,请参考以下文章

股票修正波ABc与I II III的区别

0510-II173942555757-II64

090 Subsets II 子集 II

算法:212. Word Search II单词搜索II

题目地址(4sum-ii/“>454. 四数相加 II)

119 Pascal's Triangle II 帕斯卡三角形 II Pascal's Triangle II