【LeetCode】Permutations II

来源:互联网 发布:搪瓷 知乎 编辑:程序博客网 时间:2024/06/04 17:42

Question

Tips

Still the backtracking

Source Code

class Solution {public:    void BT(int d,vector<int> &nums){    if(d==nums.size()){        vector<int> t;        for(int i=0;i<tmp.size();++i)        t.push_back(nums[tmp[i]]);        res.push_back(t);        return;    }    int rec=nums[nums.size()-1]+1;      //rec is not in nums    for(int i=0;i<nums.size();++i){        bool flag=true;         //flag that means nums[i] is int tmp or not        for(int j=0;j<d;++j)        if(i==tmp[j]){            flag=false;            break;        }        if(flag==false || rec==nums[i])        continue;        rec=nums[i];            //Record the number now , duplicate the next same number        tmp.push_back(i);        BT(d+1,nums);        tmp.erase(tmp.end()-1,tmp.end());    }    }    vector<vector<int> > permuteUnique(vector<int>& nums) {        tmp.clear();    res.clear();    sort(nums.begin(),nums.end());    for(int i=0;i<nums.size();++i){        if(i>0 && nums[i]==nums[i-1])        continue;        tmp.push_back(i);        BT(1,nums);        tmp.erase(tmp.end()-1,tmp.end());    }    return res;    }private:    vector<int> tmp;    vector<vector<int> > res;};
0 0
原创粉丝点击