leetcode47重复字符串的全排列

参考资料:

[1] leetcode47重复字符串的全排列

注意的问题:

思路:
使用set的方法在最后去掉重复的。那有没更好的呢。
如下是比较优秀的解法:

优秀解法:在全排列之前进行判断是否和前面的数有相等的,如果有相等的话,那就跳过。

class Solution {
public:
    vector> permuteUnique(vector& nums) {
        
        vector > result;
        
        int nLen=nums.size();
        
        
        
        permuteCore(nums,result,0,nLen-1);
        
        
        
        return result;
    
    }
    
    
    
    void permuteCore(vector& nums,vector >& result,int begin,int end)
    {
        if(begin==end)
            result.push_back(nums);
        else
        {
            for(int i=begin;i<=end;i++)
            {
                if(IsPermute(nums,begin,i))//第i和数和前面是否有重复,如果重复就跳过
                    continue;
                
                swap(nums[begin],nums[i]);
                permuteCore(nums,result,begin+1,end);
                swap(nums[begin],nums[i]);
            }
        }     
    }
    
    bool IsPermute(vector nums,int begin,int end)//如果第几个数和前面有相等的数的话,就跳过去
    {
        bool bFlag = false;
        for(int i=begin;i

普通解法:使用set

class Solution {
public:
    vector> permuteUnique(vector& nums) {
        
        vector > result;
        
        int nLen=nums.size();
        
        
        
        permuteCore(nums,result,0,nLen-1);
        
        set > result1;
        
        for(int i=0;i& nums,vector >& result,int begin,int end)
    {
        if(begin==end)
            result.push_back(nums);
        else
        {
            for(int i=begin;i<=end;i++)
            {
                swap(nums[begin],nums[i]);
                permuteCore(nums,result,begin+1,end);
                swap(nums[begin],nums[i]);
            }
        }
        
        
    }
};

你可能感兴趣的:(leetcode47重复字符串的全排列)