题解 | #有重复项数字的所有排列#

有重复项数字的所有排列

http://www.nowcoder.com/practice/a43a2b986ef34843ac4fdd9159b69863

public:
    int length;
    vector<vector<int>> ans;
    vector<vector<int> > permuteUnique(vector<int> &num) {
        length=num.size();
        cout<<length;
        vector<int> pop0;
        sort(num.begin(),num.end());
        count(num,pop0);
        return ans;
    }
    void count(vector<int> mid,vector<int> pop){
        int cal;
        if(pop.size()==length){
            ans.push_back(pop);
            cout<<"出";
        }
        else{
            for(int i=0;i<mid.size();i++){
                if(i!=(mid.size()-1)&&mid[i]==mid[i+1]) continue;//相同元素只选择最后一个
                cout<<"进";
                cal=mid[i];
                pop.push_back(mid[i]);
                mid.erase(mid.begin()+i);
                count(mid,pop);
                pop.pop_back();
                mid.insert(mid.begin()+i,cal);
            }
        }
        return;
    }
};

首先用sort排序,然后后面采用选择与不选择,并且若选择了之后要将选择删除后的回溯的方法,采用递归的方式进行,注意的是,若相同的元素将会导致后面排序重复,因此若元素相同,则只选择最后一个元素使用。

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务