LeetCode47. Permutations II

来源:互联网 发布:mac分段压缩文件 编辑:程序博客网 时间:2024/06/06 02:33

题目链接:

https://leetcode.com/problems/permutations-ii/

题目描述:

全排列问题。但是数组中可能包含重复元素,所以要避免解集包含重复组合的情况。

思路:

~~(╯﹏╰)b唯一需要注意的就是如何去掉重复元素带来的影响。如果当前元素和前一个的元素相等,并且前一个元素被选过了,就continue。

代码:

class Solution {public:    vector<vector<int>> res;    vector<int> permutation;    int len;    void permuteUnique(bool* flag,vector<int>& nums,int cnt){        if(cnt>len){            return;        }        else if(cnt==len){            res.push_back(permutation);        }        else{            for(int i=0;i<len;i++){                if(flag[i]){                   continue;                }                if(i!=0 && nums[i-1]==nums[i] && flag[i-1]){                       continue;                }                flag[i]=true;                permutation.push_back(nums[i]);                permuteUnique(flag,nums,cnt+1);                flag[i]=false;                permutation.pop_back();            }        }    }    vector<vector<int>> permuteUnique(vector<int>& nums) {        len=nums.size();        if(len==0){            return res;        }        sort(nums.begin(),nums.end());        bool* flag=new bool [len];        for(int i=0;i<len;i++){            flag[i]=false;        }        permuteUnique(flag,nums,0);        return res;    }};
0 0
原创粉丝点击