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

有重复项数字的全排列

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

class Solution {
public:
    vector<vector<int>> ans;
    vector<int> temp;
    vector<int> used;
    vector<vector<int> > permuteUnique(vector<int>& num) { 
        sort(num.begin(), num.end());
        used = vector<int>(num.size(), 0);

        dp(num);

        return ans;
    }

    void dp(vector<int> &num){  
        //通过选取的方式,temp凑齐了个数既组织完毕一个情况,每一层既管理一位上取什么数;因为下层是下一位,取得数应该从头开始估量,
        //若数取过了,跳过;对于重复数,如果重复数使用了,说明上一层用的,这一层任然可以使用(不同位);
        //如果前一个重复数没有使用,则表示这一位重复书已经在同一位上使用过了,不能例举同一位的相同数
        if(temp.size() == num.size()){
            ans.push_back(temp);
            return;
        }

        for(int i=0; i<num.size(); ++i){   //排列,从0开始;
            if(used[i])continue;

            if(i>0 && num[i]==num[i-1] && !used[i-1])continue;

            temp.push_back(num[i]);
            used[i] = 1;
            dp(num);
            temp.pop_back();
            used[i] = 0;
        }
    }
};

全部评论

相关推荐

感觉自己陷入了死循环,因为不知道简历写什么所以什么也不想做,然后又什么都没做所以没得写。从三月到六月,三个月啊
零壹超人:没有简历 ➜ 不找项目 ➜ 没内容写 ➜ 更没简历 ➜ … 无限循环。你陷入了死锁,随便打破死锁的四个条件之一就可以了,打破循环等待,立即开始行动,不要等待;破坏占有且等待,立即抄一份简历先把简历写出来,再一点一点学简历上的东西
点赞 评论 收藏
分享
05-14 20:34
门头沟学院 Java
窝补药贝八股:管他们,乱说,反正又不去,直接说680
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 14:11
很喜欢小米的新车,校招薪资每月22k,攒多久能买?
测试糕手手:别看工资,先看现金流存款。有50W存款以上再考虑,车是消耗品,选适合自己的重要。你有钱就当我没说过
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务